Жаңадан бастаушыларға арналған SQL бойынша суреттелген өздігінен оқуға арналған нұсқаулық. Санат мұрағаттары: SQL бойынша кітаптар Манекендерге арналған sql бағдарламалау тілі

Автордан:Сізді шәйнек деп атады ма? Бұл түзетіледі! Кез келген самауыр бір кездері шәйнек болған! Әлде кез келген кәсіпқой бір кездері самауыр болған ба? Жоқ, тағы бірдеңе дұрыс емес! Тұтастай алғанда, MySQL жаңадан бастаушыларға арналған.

Неліктен манекендерге MySQL керек?

Егер сіз өз өміріңізді Интернетпен шындап байланыстырғыңыз келсе, онда «вебте» алғашқы қадамдарда сіз осы ДҚБЖ-ға тап боласыз. MySQL-ді «барлық Интернет» дерекқорын басқару жүйесі деп атауға болады. Бірде-бір маңызды ресурс онсыз жасай алмайды, ол әрбір хостингтің басқару панелінде бар. Ең танымал CMS және тіпті өздігінен жасалған қозғалтқыштар оның қатысуымен жасалған.

Жалпы, сіз бұл платформасыз жасай алмайсыз. Бірақ оны зерттеу үшін де дұрыс көзқарас, дұрыс құралдар, ең бастысы, тілек пен шыдамдылық қажет. Сізде соңғысы көп болады деп үміттенемін. Миыңыз қайнап, нағыз шәйнектей бу шығатынына дайын болыңыз.

Бірақ MySQL оны дұрыс емес үйрене бастағанда ғана манекендерге өте қиын. Біз мұндай қателік жібермейміз және біз бұл технологиямен танысуды ең басынан бастаймыз.

Негізгі ұғымдар

Алдымен, осы мақалада айтатын негізгі ұғымдарды қарастырайық:

Мәліметтер қоры (МҚ) ДҚБЖ негізгі құрамдас бөлігі болып табылады. Мәліметтер базасына бағандар мен жазбалардан (жолдардан) тұратын кестелер кіреді. Қиылысында құрылған ұяшықтар белгілі бір типтегі құрылымдық мәліметтерді қамтиды.

ДҚБЖ (деректер қорын басқару жүйесі) – мәліметтер базасын басқаруға арналған барлық бағдарламалық модульдердің жиынтығы.

SQL – құрылымдық сұраныс тілі, оның көмегімен әзірлеуші ​​ДҚБЖ ядросымен (серверімен) «байланысады». Кез келген бағдарламалау тілі сияқты, SQL-де де өз синтаксисі, пәрмендер мен операторлар жиыны, қолдау көрсетілетін деректер түрлері бар.

Бастау үшін бізде теориялық білім жеткілікті деп ойлаймын. Біз теориядағы жетіспейтін олқылықтарды практикамен «бояймыз». Енді дұрыс бағдарламалық құралды таңдау ғана қалады.

Дұрыс құралды табу

Жаңадан бастаушыларға арналған MySQL қабықшаларының барлық ауқымын «шұңқырлап» отырып, мен олардың жоқ екенін түсіндім. ДҚБЖ әкімшілігіне арналған барлық бағдарламалық өнімдер бұрыннан орнатылған дерекқор серверін қажет етеді. Жалпы, мен «скутерді» қайта ойлап таппауды тағы бір рет шешіп, отандық Denwer пакетін таңдадым. Сіз оны ресми сайттан жүктей аласыз.

Ол қазірдің өзінде ДҚБЖ барлық құрамдастарын қамтиды, бұл бастаушыға қарапайым және түсінікті орнатудан кейін бірден MySQL-пен практикалық танысуды бастауға мүмкіндік береді. Сонымен қатар, Denwer жаңадан әзірлеушіге қажетті бірнеше басқа құралдарды қамтиды: жергілікті сервер, PHP.

Алғашқы қадамдар

Мен «джентльмендер» жиынтығын орнату процесін сипаттамаймын, өйткені онда бәрі автоматты түрде болады. Орнатуды іске қосқаннан кейін тек қажетті пернелерді басып үлгеріңіз. MySQL-тің жалған нұсқасында сізге қажет нәрсе.

Орнату процесі аяқталғанда, жергілікті серверді іске қосыңыз, бірнеше секунд күтіңіз. Осыдан кейін браузеріңіздің мекенжай жолағына localhost деп теріңіз.

Бетінде «Ура, ол жұмыс істейді!» суреттегі сілтемелердің бірін орындаңыз. Содан кейін сіз phpMyAdmin - дерекқорды басқаруға арналған қабықшаға өтесіз.

http://downloads.mysql.com/docs/world.sql.zip сілтемесін басу арқылы сіз MySQL ресми веб-сайтынан сынақ деректерінің үлгісін жүктейсіз. PhpMyAdmin сайтына қайта өтіңіз, жоғарғы жағындағы негізгі мәзірде «Импорт» қойындысына өтіңіз. Бірінші бөлімдегі «Ағымдағыға импорттау» терезесінде («Импортталатын файл») «Компьютерді шолу» мәнін орнатыңыз.

Explorer терезесінде жүктеп алынған дерекқор мысалы бар мұрағатты таңдаңыз. Негізгі терезенің төменгі жағындағы «Жарайды» түймесін басуды ұмытпаңыз.

Көрсетілген параметр мәндерін әзірше өзгертпеуге кеңес беремін. Бұл импортталған дереккөз деректерінің дұрыс көрсетілмеуіне әкелуі мүмкін. Егер phpMyAdmin дерекқорды қысу алгоритмін тани алмайтын қатені берсе, оны ашыңыз және импорттау процесін басынан бастап қайталаңыз.

Егер бәрі ойдағыдай болса, жоғарғы жағында импорттау сәтті болғаны туралы бағдарлама хабарламасы пайда болады, ал ДҚ тізімінде сол жақта тағы біреуі (сөз) бар.

Оның құрылымын ішінен қарастырайық, сонда сіз немен күресуге тура келетінін анық елестете аласыз.

Жаңадан бастаушыларға арналған MySQL дерекқорының атын басыңыз. Оның астында ол тұратын кестелер тізімі көрсетіледі. Олардың біреуін басыңыз. Содан кейін жоғарғы мәзір элементіне өтіңіз «Құрылым». Негізгі жұмыс аймағы кестенің құрылымын көрсетеді: барлық баған атаулары, деректер түрлері және барлық атрибуттар.

Бұл оқулық SQL тіліне (DDL, DML) арналған «менің жадымның мөрі» сияқты нәрсе, яғни. бұл менің кәсіби қызметім барысында жинақталған және үнемі менің басымда сақталған ақпарат. Бұл мен үшін жеткілікті минимум, ол дерекқорлармен жұмыс істеу кезінде жиі қолданылады. Егер толық SQL құрылымдарын пайдалану қажет болса, мен әдетте Интернетте орналасқан MSDN кітапханасына көмек сұраймын. Менің ойымша, барлығын өз ойларыңызда ұстау өте қиын және бұған ерекше қажеттілік жоқ. Бірақ негізгі құрылыстарды білу өте пайдалы, өйткені олар Oracle, MySQL, Firebird сияқты көптеген реляциялық дерекқорларда бірдей дерлік түрде қолданылады. Айырмашылықтар негізінен деректер түрлерінде, олар егжей-тегжейлі түрде ерекшеленуі мүмкін. SQL тілінің негізгі құрылымдары соншалықты көп емес, және үнемі жаттығу кезінде олар тез есте қалады. Мысалы, объектілерді (кестелер, шектеулер, индекстер және т.б.) жасау үшін деректер қорымен жұмыс істеуге арналған ортаның мәтіндік редакторы (IDE) қолыңызда болса жеткілікті, ал нақтыланған көрнекі құралдарды зерттеудің қажеті жоқ. белгілі бір дерекқор түрімен жұмыс істеу (MS SQL , Oracle, MySQL, Firebird, ...). Бұл сонымен қатар ыңғайлы, өйткені барлық мәтін сіздің көз алдыңызда және мысалы, индекс немесе шектеу жасау үшін көптеген қойындыларды аралап өтудің қажеті жоқ. Мәліметтер қорымен тұрақты жұмыс кезінде сценарийлерді пайдаланып нысанды жасау, өзгерту және әсіресе қайта жасау визуалды режимде орындалғанға қарағанда бірнеше есе жылдамырақ. Сондай-ақ сценарий режимінде (сәйкесінше, мұқият түрде) объектілерді атау ережелерін орнату және басқару оңайырақ (менің субъективті пікірім). Сонымен қатар, сценарийлер бір дерекқорға енгізілген өзгерістерді (мысалы, тестілік) басқа (өнімді) дерекқорға бір пішінде тасымалдау қажет болғанда қолдануға ыңғайлы.

SQL тілі бірнеше бөліктерге бөлінген, мен мұнда оның ең маңызды 2 бөлігін талқылаймын:
  • DML - Деректерді өңдеу тілі, ол келесі конструкцияларды қамтиды:
    • SELECT – деректерді таңдау
    • INSERT – жаңа мәліметтерді енгізу
    • UPDATE – деректерді жаңарту
    • DELETE – деректерді жою
    • MERGE – деректерді біріктіру
Өйткені Мен тәжірибешімін, бұл оқулықта мұндай теория аз болады және барлық конструкциялар практикалық мысалдармен түсіндіріледі. Сонымен қатар, бағдарламалау тілін, әсіресе, SQL тілін өз бетінше сезініп, сол немесе басқа құрылысты орындаған кезде не болатынын түсіну арқылы ғана іс жүзінде меңгеруге болады деп ойлаймын.

Бұл оқу құралы Step by Step принципіне негізделген, яғни. оны дәйекті және дұрысы мысалдардан кейін бірден оқу керек. Бірақ егер жолда сізге пәрмен туралы толығырақ білу қажет болса, Интернетте, мысалы, MSDN кітапханасында белгілі бір іздеуді пайдаланыңыз.

Осы оқулықты жазған кезде MS SQL Server Management Studio (SSMS) пайдаланған сценарийлерді орындау үшін MS SQL Server дерекқорының 2014 нұсқасы пайдаланылды.

MS SQL Server Management Studio (SSMS) туралы қысқаша

SQL Server Management Studio (SSMS) — Microsoft SQL Server бағдарламасына арналған дерекқор құрамдастарын конфигурациялауға, басқаруға және басқаруға арналған утилита. Бұл утилитада сценарий редакторы (біз оны негізінен қолданамыз) және сервер нысандарымен және параметрлерімен жұмыс істейтін графикалық бағдарлама бар. SQL Server Management Studio бағдарламасындағы негізгі құрал пайдаланушыға сервер нысандарын көруге, шығарып алуға және басқаруға мүмкіндік беретін Object Explorer болып табылады. Бұл мәтін Уикипедиядан ішінара алынған.

Жаңа сценарий өңдегішін жасау үшін Жаңа сұрау түймесін пайдаланыңыз:

Ағымдағы дерекқорды өзгерту үшін ашылмалы тізімді пайдалануға болады:

Белгілі бір пәрменді (немесе командалар тобын) орындау үшін оны таңдап, Орындау немесе F5 пернесін басыңыз. Егер қазіргі уақытта редакторда бір ғана команда болса немесе барлық командаларды орындау қажет болса, онда ештеңені таңдаудың қажеті жоқ.

Сценарийлерді орындағаннан кейін, әсіресе нысандарды (кестелер, бағандар, индекстер) жасайтындар, өзгертулерді көру үшін контекстік мәзірден сәйкес топты (мысалы, Кестелер), кестенің өзін немесе ондағы Бағандар тобын таңдау арқылы жаңартуды пайдаланыңыз.

Шындығында, осы жерде келтірілген мысалдарды орындау үшін білуіміз керек нәрсе. SSMS утилитасының қалған бөлігін өз бетіңізше үйрену оңай.

Біраз теория

Реляциялық деректер қоры (RDB, немесе одан әрі жай ғана дерекқор контекстінде) - бұл өзара байланысты кестелер жиынтығы. Дөрекі сөзбен айтқанда, деректер базасы - бұл деректер құрылымдық пішінде сақталатын файл.

ДҚБЖ – осы Дерекқорларды басқару жүйесі, яғни. бұл мәліметтер қорының белгілі бір түрімен жұмыс істеуге арналған құралдар жиынтығы (MS SQL, Oracle, MySQL, Firebird, ...).

Ескерту
Өйткені өмірде, ауызекі сөйлеуде біз көбінесе: «Oracle DB» деп айтамыз немесе жай ғана «Oracle», шын мәнінде «Oracle DBMS» дегенді білдіреді, содан кейін осы оқу құралының контекстінде ДҚ термині кейде пайдаланылады. Контексттен оның не туралы екені түсінікті болады деп ойлаймын.

Кесте - бұл бағандар жиынтығы. Бағандарды өрістер немесе бағандар деп те атауға болады, бұл сөздердің барлығы бірдей нәрсені білдіру үшін синоним ретінде пайдаланылады.

Кесте РДБ негізгі объектісі болып табылады, барлық RDB деректері кестенің бағандарында жол бойынша сақталады. Жолдар, жазбалар да синонимдер.

Әрбір кесте үшін, сондай-ақ оның бағандары үшін кейіннен оларға қол жеткізуге болатын аттар беріледі.
MS SQL тіліндегі нысан атауының (кесте аты, баған аты, индекс атауы және т.б.) максималды ұзындығы 128 символдан аспауы мүмкін.

Анықтама үшін- ORACLE дерекқорында нысан атауларының максималды ұзындығы 30 таңба болуы мүмкін. Сондықтан белгілі бір дерекқор үшін таңбалар санының шегінде сақтау үшін объектілерді атау ережелерін әзірлеу керек.

SQL — ДҚБЖ көмегімен мәліметтер қорындағы сұрауларды орындауға мүмкіндік беретін тіл. Арнайы ДҚБЖ-да SQL тілінде нақты іске асыру (өз диалектісі) болуы мүмкін.

DDL және DML - SQL тілінің ішкі жиыны:

  • DDL тілі дерекқор құрылымын құру және өзгерту үшін қолданылады, яғни. кестелер мен сілтемелерді құру / өзгерту / жою.
  • DML тілі кесте деректерімен манипуляциялауға мүмкіндік береді, яғни. оның сызықтарымен. Ол кестелерден деректерді таңдауға, кестелерге жаңа деректерді қосуға және бар деректерді жаңартуға және жоюға мүмкіндік береді.

SQL тілінде қолдануға болатын түсініктемелердің 2 түрі бар (бір жолды және көп жолды):

Бір жолдық түсініктеме
және

/ * көп жолды түсініктеме * /

Шын мәнінде, бұл теория үшін жеткілікті болады.

DDL - Деректерді анықтау тілі

Мысалы, бағдарламашы емес адам үшін әдеттегі пішіндегі қызметкерлер туралы деректер бар кестені қарастырыңыз:

Бұл жағдайда кестенің бағандарында келесі атаулар болады: Персонал нөмірі, Т.А.Ә., Туған күні, Электрондық поштасы, Лауазымы, Бөлім.

Осы бағандардың әрқайсысын құрамындағы деректер түрімен сипаттауға болады:

  • Персонал саны – бүтін
  • Толық аты – жол
  • Туған күні - күні
  • Электрондық пошта – жол
  • Позиция - жол
  • Бөлім – жол
Баған түрі – берілген бағанның қандай деректер түрін сақтай алатынын көрсететін сипаттама.

Бастау үшін MS SQL-де қолданылатын келесі негізгі деректер түрлерін ғана есте сақтау жеткілікті:

Мағынасы MS SQL белгісі Сипаттама
Ұзындығы өзгермелі жол вархар (N)
және
nvarchar (N)
N санымен сәйкес баған үшін жолдың максималды мүмкін ұзындығын белгілей аламыз. Мысалы, егер «атау» бағанының мәні ең көбі 30 таңбадан тұруы мүмкін екенін айтқымыз келсе, онда оны nvarchar (30) түріне орнату керек.
Varchar мен nvarchar арасындағы айырмашылық мынада: varchar жолдарды ASCII пішімінде сақтайды, мұнда бір таңба 1 байт, ал nvarchar жолдарды Юникод пішімінде сақтайды, мұнда әрбір таңба 2 байт.
Varchar түрі өрісте Юникод таңбаларын сақтау қажет емес екеніне 100% сенімді болсаңыз ғана пайдаланылуы керек. Мысалы, varchar электрондық пошта мекенжайларын сақтау үшін пайдаланылуы мүмкін, себебі олар әдетте тек ASCII таңбаларын қамтиды.
Тұрақты ұзындықты жол таңба (N)
және
nchar (N)
Бұл түрдің айнымалы ұзындықты жолдан айырмашылығы, егер жол ұзындығы N таңбадан аз болса, онда ол әрқашан оңға қарай N ұзындығына дейін бос орындармен толтырылады және деректер қорында осы пішінде сақталады, яғни. ол дерекқорда дәл N таңбаны алады (мұнда бір таңба char үшін 1 байт және nchar үшін 2 байт алады). Менің тәжірибемде бұл түрі өте сирек қолданылады, егер ол қолданылса, онда ол негізінен char (1) форматында қолданылады, яғни. өріс бір таңбамен анықталған кезде.
Бүтін сан int Бұл түр бізге бағандағы оң және теріс сандарды ғана пайдалануға мүмкіндік береді. Анықтама үшін (қазір бұл біз үшін маңызды емес) - int түрі рұқсат ететін сандар диапазоны -2 147 483 648-ден 2 147 483 647-ге дейін. Әдетте бұл идентификаторларды орнату үшін қолданылатын негізгі тип.
Нақты немесе нақты сан жүзу Қарапайым тілмен айтқанда, бұл ондық нүкте (үтір) болуы мүмкін сандар.
күні күні Егер сізге үш құрамдас бөліктен тұратын бағандағы Күнді ғана сақтау қажет болса: Сан, Ай және Жыл. Мысалы, 15.02.2014 (15 ақпан 2014 ж.). Бұл түрді «Қабылдау күні», «Туған күні» бағандары және т.б. біз үшін тек күнді белгілеу маңызды болған жағдайларда немесе уақыт құрамдас бөлігі біз үшін маңызды емес және жойылуы мүмкін немесе ол белгісіз болса.
Уақыт уақыт Бұл түрді тек уақыт деректерін бағанда сақтау қажет болған жағдайда пайдалануға болады, яғни. Сағат, минут, секунд және миллисекунд. Мысалы, 17:38: 31.3231603
Мысалы, күнделікті «Ұшудың жөнелту уақыты».
күні мен уақыты дата уақыты Бұл түрі бір мезгілде Күнді де, уақытты да сақтауға мүмкіндік береді. Мысалы, 15.02.2014 17:38: 31.323
Мысалы, бұл оқиғаның күні мен уақыты болуы мүмкін.
Жалау бит Бұл түр «Иә» / «Жоқ» сияқты мәндерді сақтауға ыңғайлы, мұнда «Иә» 1, ал «Жоқ» 0 ретінде сақталады.

Сондай-ақ, өріс мәні, егер ол тыйым салынбаған болса, көрсетілмеуі мүмкін, бұл мақсат үшін NULL кілттік сөзі пайдаланылады.

Мысалдарды іске қосу үшін Test деп аталатын сынақ базасын жасайық.

Қарапайым дерекқорды (қосымша параметрлерді көрсетпей) келесі пәрменді орындау арқылы жасауға болады:

ДЕРЕКТЕР БАЗЫН ЖАСАУ сынағы
Дерекқорды пәрмен арқылы жоюға болады (бұл пәрменмен өте сақ болу керек):

DROP DATABASE сынағы
Біздің дерекқорымызға ауысу үшін келесі пәрменді орындауға болады:

Сынақты ҚОЛДАНУ
Немесе, SSMS мәзір аймағындағы ашылмалы тізімнен Сынақ дерекқорын таңдаңыз. Жұмыс кезінде мен базалар арасында ауысудың осы әдісін жиі қолданамын.

Енді дерекқорымызда бос орындар мен кириллица таңбаларын пайдаланып, сипаттамаларды сол күйінде қолданып кесте жасай аламыз:

КЕСТЕ ЖАСАУ [Қызметкерлер] ([Персонал нөмірі] int, [Аты-жөні] nvarchar (30), [Туған күні] күні, nvarchar (30), [Лауазымы] nvarchar (30), [Бөлім] nvarchar (30))
Бұл жағдайда біз атауларды төртбұрышты жақшаға алуымыз керек [...].

Бірақ дерекқорда ыңғайлы болу үшін нысандардың барлық атауларын латын әліпбиінде көрсетіп, атауларда бос орындарды пайдаланбаған дұрыс. MS SQL-де әдетте бұл жағдайда әрбір сөз бас әріптен басталады, мысалы, «Персонал нөмірі» өрісі үшін PersonnelNumber атауын орнатуға болады. Сондай-ақ атауда сандарды пайдалануға болады, мысалы, PhoneNumber1.

Жазбада
Кейбір ДҚБЖ-да келесі атау пішімі "PHONE_NUMBER" қолайлырақ болуы мүмкін, мысалы, бұл пішім ORACLE DB-де жиі пайдаланылады. Әрине, өріс атауын көрсету кезінде оның ДҚБЖ-да қолданылатын түйінді сөздермен сәйкес келмеуі қажет.

Осы себепті шаршы жақшалар синтаксисін ұмытып, [Қызметкерлер] кестесін жоюға болады:

ҚОСУ КЕСТЕСІ [Қызметкерлер]
Мысалы, қызметкерлері бар кестені «Қызметкерлер» деп атауға болады, ал оның өрістерін келесідей атауға болады:

  • ID - Персонал нөмірі (Қызметкер ID)
  • Аты-жөні - толық аты-жөні
  • Туған күні - туған күні
  • Электрондық пошта – E-mail
  • Позиция - Позиция
  • Бөлім – Бөлім
Көбінесе ID сөзі идентификатор өрісін атау үшін қолданылады.

Енді кестемізді құрайық:

КЕСТЕ ЖАСАУ Қызметкерлер (ID int, Аты nvarchar (30), Туған күні, Электрондық пошта nvarchar (30), Лауазым nvarchar (30), Бөлім nvarchar (30))
Қажетті бағандарды көрсету үшін NULL ЕМЕС опциясын пайдалануға болады.

Бар кесте үшін өрістерді келесі пәрмендер арқылы қайта анықтауға болады:

Идентификатор өрісін жаңарту ALTER TABLE Қызметкерлер ALTER COLUMN ID int NOT NULL - Атау өрісін жаңарту ALTER TABLE Employees ALTER COLUMN Name nvarchar (30) NO NULL

Жазбада
Көптеген ДҚБЖ үшін SQL тілінің жалпы тұжырымдамасы өзгеріссіз қалады (кем дегенде, мен мұны мен жұмыс істеген ДҚБЖ арқылы бағалай аламын). Әртүрлі ДҚБЖ-дағы DDL арасындағы айырмашылық негізінен деректер типтерінде (мұнда олардың атаулары ғана емес, сонымен қатар оларды жүзеге асырудың егжей-тегжейлері де ерекшеленуі мүмкін), SQL тілін жүзеге асыру ерекшеліктері де аздап ерекшеленуі мүмкін (яғни, мәтіннің мәні). пәрмендері бірдей, бірақ диалектінде шамалы айырмашылықтар болуы мүмкін, өкінішке орай, бірақ бір стандарт жоқ). SQL негіздерін біле отырып, сіз бір ДҚБЖ-дан екіншісіне оңай ауыса аласыз, өйткені бұл жағдайда сізге тек жаңа ДҚБЖ-да командаларды орындаудың егжей-тегжейлерін түсіну керек, яғни. көп жағдайда қарапайым ұқсастық жеткілікті болады.

Кестені жасау CREATE TABLE Қызметкерлер (ID int, - ORACLE-да, int түрі (38) санына баламасы (орам) nvarchar2 (30) атауы, - ORACLE ішіндегі nvarchar2 MS SQL жүйесіндегі nvarchar-ға баламалы Туған күн, Email nvarchar2 ) , Позиция nvarchar2 (30), Бөлім nvarchar2 (30)); - ID және Name өрістерін жаңарту (мұнда ALTER COLUMN орнына MODIFY (…) пайдаланылады) ALTER TABLE Employees MODIFY (ID int NOT NULL, Name nvarchar2 (30) NO NULL); - PK қосу (бұл жағдайда құрылыс MS SQL-дегідей болады, ол төменде көрсетіледі) ALTER TABLE Employees ADD COSTRAINT PK_Employees PRIMARY KEY (ID);
ORACLE үшін varchar2 түрін іске асыру тұрғысынан айырмашылықтар бар, оның кодталуы деректер базасының параметрлеріне байланысты және мәтінді, мысалы, UTF-8 кодтауында сақтауға болады. Сонымен қатар, ORACLE ішіндегі өріс ұзындығын байттармен де, таңбалармен де орнатуға болады, бұл үшін өріс ұзындығынан кейін көрсетілген BYTE және CHAR қосымша опциялары пайдаланылады, мысалы:

NAME varchar2 (30 БАЙТ) - өріс сыйымдылығы 30 байт болады NAME varchar2 (30 CHAR) - өріс сыйымдылығы 30 таңба болады
Қай опция әдепкі бойынша BYTE немесе CHAR пайдаланылады, ORACLE ішінде varchar2 (30) түрінің қарапайым индикациясы болған жағдайда, дерекқор параметрлеріне байланысты, оны кейде IDE параметрлерінде орнатуға болады. Жалпы, кейде сіз оңай шатасуыңыз мүмкін, сондықтан ORACLE жағдайында, егер varchar2 түрі қолданылса (және бұл кейде мұнда негізделеді, мысалы, UTF-8 кодтауын пайдалану кезінде), мен CHAR деп нақты жазғанды ​​қалаймын ( өйткені жолдың ұзындығын таңбалармен оқу әдетте ыңғайлырақ).

Бірақ бұл жағдайда кестеде әлдеқашан деректер болса, командалардың сәтті орындалуы үшін кестенің барлық жолдарындағы ID және Name өрістерін толтыру қажет. Мұны мысалмен көрсетейік, ID, Позиция және Бөлім өрістеріндегі кестеге деректерді енгізіңіз, мұны келесі сценарий арқылы жасауға болады:

INSERT қызметкерлер (жеке куәлік, лауазым, бөлім) ҚҰНДЫҚТАР (1000, N «Директор», N «Әкімшілік»), (1001, N «Бағдарламашы», N «IT»), (1002, N «Бухгалтер», N «Бухгалтерлік есеп» ), (1003, N «Аға бағдарламашы», N «IT»)
Бұл жағдайда INSERT пәрмені де қатені тудырады, өйткені енгізу кезінде біз қажетті Атау өрісінің мәнін көрсетпедік.
Егер бізде бұл деректер бастапқы кестеде бұрыннан болса, онда «ALTER TABLE Employees ALTER COLUMN ID int NOT NULL» пәрмені сәтті орындалған болар еді және «ALTER TABLE Employees ALTER COLUMN Name int NOT NULL» пәрмені қате туралы хабарды тудырған болар еді. , Аты өрісінде NULL (анықталмаған) мәндер бар екенін.

Атау өрісіне мәндерді қосып, деректерді қайтадан толтырыңыз:


Сондай-ақ, жаңа кестені құру кезінде NOT NULL опциясын тікелей пайдалануға болады, яғни. CREATE TABLE командасының контекстінде.

Алдымен мына пәрмен арқылы кестені жоямыз:

DROP TABLE Қызметкерлер
Енді ID және Name міндетті бағандары бар кестені құрайық:

КЕСТЕ ЖАСАУ Қызметкерлер (ID int NOLL NULL, Аты nvarchar (30) NO NULL, Туған күні, Электрондық пошта nvarchar (30), Позиция nvarchar (30), Бөлім nvarchar (30))
Сондай-ақ бағанның атынан кейін NULL мәнін жазуға болады, бұл онда NULL мәндеріне (көрсетілмеген) рұқсат етілетінін білдіреді, бірақ бұл қажет емес, өйткені бұл сипаттама әдепкі бойынша қабылданады.

Егер, керісінше, толтыру үшін бар бағанды ​​міндетті емес ету қажет болса, біз келесі пәрмен синтаксисін қолданамыз:

ALTER TABLE Қызметкерлер ALTER COLUMN Аты nvarchar (30) NULL
Немесе жай:

ALTER TABLE Қызметкерлер ALTER COLUMN Аты nvarchar (30)
Сондай-ақ, осы пәрмен арқылы біз өрістің түрін басқа үйлесімді түрге өзгерте аламыз немесе оның ұзындығын өзгерте аламыз. Мысалы, Атау өрісін 50 таңбаға дейін кеңейтейік:

ALTER TABLE Қызметкерлер ALTER COLUMN Аты nvarchar (50)

Негізгі кілт

Кестені құру кезінде оның әрбір жолы үшін бірегей болып табылатын бірегей баған немесе бағандар жиыны болғаны жөн - жазба осы бірегей мән арқылы бірегей түрде анықталуы мүмкін. Бұл мән кестенің бастапқы кілті деп аталады. Біздің қызметкерлер кестесі үшін мұндай бірегей мән идентификатор бағаны болуы мүмкін («Қызметкер персонал нөмірі» бар – біздің жағдайда бұл мән әрбір қызметкер үшін бірегей және қайталанбайтын болса да).

Пәрменді пайдаланып бар кестеге бастапқы кілт жасауға болады:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ҚОСУ ШЕКТЕУЛІ PK_Қызметкерлер НЕГІЗГІ КІЛТІ (ID)
Мұндағы "PK_Employees" - бастапқы кілт үшін жауапты шектеу атауы. Әдетте, «PK_» префиксі бастапқы кілтті, содан кейін кесте атауын атау үшін пайдаланылады.

Бастапқы кілт бірнеше өрістерден тұрса, онда бұл өрістер үтірмен бөлінген жақша ішінде көрсетілуі керек:

ALTER TABLE кесте_атауы ҚОСУ ШЕКТЕУ_атауы БАСТАУЫШ КҮЙЕУ (өріс1, өріс2, ...)
Айта кету керек, MS SQL-де бастапқы кілтке кіретін барлық өрістер НҰЛ БОЛМАУ керек.

Сондай-ақ, кестені құру кезінде бастапқы кілтті тікелей анықтауға болады, яғни. CREATE TABLE командасының контекстінде. Кестені жойайық:

DROP TABLE Қызметкерлер
Содан кейін оны келесі синтаксисті қолданып жасайық:

CREATE TABLE Қызметкерлері (ID int NOT NULL, Name nvarchar (30) NO NULL, Туған күні, Электрондық пошта nvarchar (30), Позиция nvarchar (30), Бөлім nvarchar (30), CONSTRAINT PK_Employees PRIMARY KEY (IDK) кейін сипаттайды - өрістер шектеу ретінде)
Құрылғаннан кейін кестеге деректерді толтырыңыз:

INSERT Қызметкерлер (жеке куәлік, лауазым, бөлім, аты-жөні) ҚҰНДЫҚТАР (1000, N «Директор», N «Әкімшілік», N «Иванов И.И.»), (1001, N «Бағдарламашы», N «IT», N « Петров П.П. « ), (1002, N" Бухгалтер ", N" Бухгалтерлік есеп ", Н" Сидоров С.С. "), (1003, N" Аға бағдарламашы ", N" IT ", Н" Андреев А. А.")
Егер кестедегі бастапқы кілт тек бір бағанның мәндерінен тұрса, онда келесі синтаксисті қолдануға болады:

CREATE TABLE Employees (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - өріс сипаттамасы ретінде көрсетіңіз Аты nvarchar (30) NULL ЕМЕС, Туған күн, Электрондық пошта nvarchar (30), Позиция nvarchar (30), Бөлім30r)
Шын мәнінде, шектеу атауын өткізіп жіберуге болады, бұл жағдайда оған жүйе атауы тағайындалады («PK__Employee__3214EC278DA42077» сияқты):

КЕСТЕ ЖАСАУ Қызметкерлер (ID int NOLL NULL, Аты nvarchar (30) NULL ЕМЕС, Туған күні, Электрондық пошта nvarchar (30), Позиция nvarchar (30), Бөлім nvarchar (30), БІРІНШІ КІЛТ (ID))
Немесе:

CREATE TABLE Қызметкерлері (ID int NOLL NULL PRIMARY KEY, Аты nvarchar (30) NO NULL, Туған күн, электрондық пошта nvarchar (30), Позиция nvarchar (30), Бөлім nvarchar (30))
Бірақ мен әрқашан тұрақты кестелер үшін шектеу атауын нақты көрсетуді ұсынар едім, өйткені анық берілген және түсінікті атаумен оны өңдеу оңайырақ болады, мысалы, оны жоюға болады:

ҚЫЗМЕТКЕРЛЕРДІ ӨЗГЕРТУ PK_ҚЫЗМЕТКЕРЛЕРІ
Бірақ мұндай қысқа синтаксис шектеулердің атауларын көрсетпей, уақытша деректер қоры кестелерін құру кезінде қолдануға ыңғайлы (уақытша кестенің аты # немесе ## әрпінен басталады), олар пайдаланғаннан кейін жойылады.

Қорытындылайық

Осы уақытқа дейін біз келесі пәрмендерді қарастырдық:
  • КЕСТЕН ​​ЖАСАУкесте_атауы (өрістерді және олардың түрлерін, шектеулерді санау) - ағымдағы деректер қорында жаңа кесте құру үшін қолданылады;
  • КЕСТЕНДІ ТАРТУкесте_атауы - ағымдағы деректер қорынан кестені жою үшін қызмет етеді;
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы БАҒАНА БАҒАНбаған_атауы... - баған түрін жаңарту немесе оның параметрлерін өзгерту үшін қолданылады (мысалы, NULL немесе NO NULL сипаттамасын көрсету үшін);
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы ШЕКТЕУ ҚОСУшектеу_атауы БАСТЫҚТЫ КІЛТ(өріс1, өріс2, ...) - бар кестеге бастапқы кілтті қосу;
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы ҚОСУ ШЕКТЕУЛІ constraint_name - кестеден шектеуді жояды.

Уақытша кестелер туралы аздап

MSDN үзіндісі. MS SQL серверінде уақытша кестелердің екі түрі бар: жергілікті (#) және ғаламдық (##). Жергілікті уақытша кестелер SQL Server данасына қосылу аяқталмайынша, олар алғаш жасалғаннан кейін оларды жасаушыларға ғана көрінеді. Пайдаланушы SQL серверінің данасын ажыратқаннан кейін жергілікті уақытша кестелер автоматты түрде жойылады. Ғаламдық уақытша кестелер осы кестелер жасалғаннан кейін кез келген қосылым сеанстары кезінде барлық пайдаланушыларға көрінеді және осы кестелерге сілтеме жасайтын барлық пайдаланушылар SQL Server данасынан ажыратылған кезде жойылады.

Уақытша кестелер tempdb жүйелік деректер базасында жасалады, яғни. оларды жасау арқылы біз негізгі негізді қоқыспен тастамаймыз, әйтпесе уақытша кестелер кәдімгі кестелерге толығымен ұқсайды, оларды DROP TABLE командасы арқылы да түсіруге болады. Жергілікті (#) уақытша кестелер жиі пайдаланылады.

Уақытша кесте құру үшін CREATE TABLE командасын пайдалануға болады:

КЕСТЕНІ ЖАСАУ #Temp (ID int, Name nvarchar (30))
MS SQL-дегі уақытша кесте кәдімгі кестеге ұқсас болғандықтан, оны DROP TABLE пәрменімен өзіңіз де тастай аласыз:

ТАҢДАУ ҮСТЕН #Темп

Сондай-ақ, уақытша кестені (тұрақты кестенің өзі сияқты) жасауға және SELECT ... INTO синтаксисі арқылы сұрау арқылы қайтарылған деректермен дереу толтыруға болады:

ТАҢДАУ Идентификаторы, аты INTO #Temp FROM Қызметкерлер

Жазбада
Уақытша кестелерді енгізу әртүрлі ДҚБЖ-да әртүрлі болуы мүмкін. Мысалы, ORACLE және Firebird ДҚБЖ-да уақытша кестелердің құрылымын алдын ала CREATE GLOBAL TEMPORARY TABLE командасымен анықтау керек, онда деректерді сақтау ерекшеліктерін көрсетеді, содан кейін пайдаланушы оны негізгі кестелер арасында көре алады және онымен жұмыс істей алады. кәдімгі үстелмен.

Мәліметтер базасын нормалау – ішкі кестелерге (анықтамалық кітаптар) бөлу және қатынастарды анықтау

Біздің ағымдағы Қызметкерлер кестесінің кемшілігі бар: «Лауазым» және «Бөлім» өрістеріне пайдаланушы кез келген мәтінді енгізе алады, бұл ең алдымен қателерге толы, өйткені бір қызметкер «АТ» бөлімін жай ғана көрсете алады, ал екінші қызметкер, мысалы, , «АТ бөлімі», үшінші «АТ» бөліміне кіріңіз. Нәтижесінде, пайдаланушының не айтқысы келгені түсініксіз болады, яғни. Бұл қызметкерлер бір бөлімнің қызметкерлері ме, әлде пайдаланушы өзін сипаттайды және бұл 3 түрлі бөлімдер ме? Оның үстіне, бұл жағдайда біз әрбір бөлімнің контекстінде қызметкерлер санын көрсету талап етілуі мүмкін кейбір есеп үшін деректерді дұрыс топтай алмаймыз.

Екінші кемшілік - бұл ақпаратты сақтау көлемі және оның қайталануы, яғни. әрбір қызметкер үшін бөлімнің толық атауы көрсетіледі, ол бөлім атауынан әрбір таңбаны сақтау үшін деректер базасында бос орынды қажет етеді.

Үшінші кемшілік, егер позицияның тақырыбы өзгерсе, мысалы, «Бағдарламашы» позициясының атын «Кіші бағдарламашы» деп өзгерту қажет болса, бұл өрістерді жаңартудың күрделілігі. Бұл жағдайда Позиция «Бағдарламашыға» тең болатын кестенің әрбір жолына өзгертулер енгізуге тура келеді.

Бұл кемшіліктерді болдырмау үшін деректер қорын нормалау деп аталатын әдіс қолданылады - оны ішкі кестелерге, анықтамалық кестелерге бөлу. Теорияның джунглиіне кіріп, қалыпты формалардың не екенін зерттеудің қажеті жоқ, нормалаудың мәнін түсіну жеткілікті.

«Лауазымдар» және «Бөлім» деген 2 кестені құрайық, біріншісі лауазымдар деп аталады, ал екіншісі сәйкесінше Бөлімдер:

CREATE TABLE Позициялары (ID int IDENTITY (1,1) NO NULL CONSTRAINT PK_Positions PRIMARY KEY, Атау nvarchar (30) NO NULL) КЕСТЕ ҚҰРУ Бөлімдер (ID int IDENTITY (1,1) NO NULL CONSTRAINT PK_DEpartments, PK_Departmentsr0 Name ) НҰЛ ЕМЕС)
Мұнда біз ID бағанындағы деректер автоматты түрде 1-ден бастап, 1-қадаммен нөмірленетінін айтатын жаңа IDENTITY опциясын пайдаланғанымызды ескеріңіз, яғни. жаңа жазбаларды қосқанда, оларға ретімен 1, 2, 3 және т.б. мәндері тағайындалады. Мұндай өрістер әдетте автоматты ұлғайту деп аталады. Кестеде IDENTITY қасиеті бар бір ғана өрісті анықтауға болады және әдетте, бірақ міндетті емес, мұндай өріс сол кестенің негізгі кілті болып табылады.

Жазбада
Әртүрлі ДҚБЖ-да есептегіші бар өрістерді жүзеге асыру өзінше жүзеге асырылуы мүмкін. Мысалы, MySQL-де мұндай өріс AUTO_INCREMENT опциясы арқылы анықталады. Бұрын ORACLE және Firebird-те бұл функция SEQUENCE көмегімен эмуляциялануы мүмкін. Бірақ, менің білуімше, ORACLE қазір ЖАСАЛҒАН ЕСЕПТІЛІК опциясын қосты.

Осы кестелерді Қызметкерлер кестесінің Лауазым және Бөлім өрістерінде жазылған ағымдағы деректер негізінде автоматты түрде толтырайық:

Лауазымдар кестесінің Атау өрісін Қызметкерлер кестесінің Лауазым өрісінен бірегей мәндермен толтырыңыз Лауазымдарды INSERT (Аты) Қызметкерлерден ДИSTINCT Позицияны ТАҢДАУ ЖЕРДЕ Лауазым NULL ЕМЕС - орны көрсетілмеген жазбаларды алып тастаңыз.
Бөлімшелер кестесі үшін де солай істейік:

Бөлімдерді ЕНГІЗУ (Аты-жөні) Бөлім бос емес ЖЕРДЕ ҚЫЗМЕТКЕРЛЕРДЕН АЙҚЫН БӨЛІМ ТАҢДАУ
Егер біз қазір «Позициялар мен бөлімдер» кестелерін ашсақ, ID өрісі үшін нөмірленген мәндер жинағын көреміз:

Позициялардан * ТАҢДАУ

Бөлімдерден * ТАҢДАУ

Бұл кестелер енді лауазымдар мен бөлімдерді тағайындау үшін анықтамалық рөл атқаратын болады. Біз енді жұмыс және бөлім идентификаторларына жүгінеміз. Ең алдымен, идентификатор деректерін сақтау үшін Қызметкерлер кестесінде жаңа өрістерді жасайық:

Позиция идентификаторы үшін өріс қосу КЕСТЕГІ ALTER Employees ADD PositionID int - бөлімнің идентификаторы үшін өрісті қосыңыз ALTER TABLE Қызметкерлер ADD DepartmentID int
Анықтамалық өрістердің түрі сілтемелердегідей болуы керек, бұл жағдайда ол int.

Сондай-ақ, бір пәрмен арқылы кестеге бірден бірнеше өрістерді қосуға болады, жолдарды үтірмен бөлінген тізімдер:

АЛТЕР КЕСТЕСІ Қызметкерлер ҚОСУ Позиция идентификаторы int, DepartmentID int
Енді біз осы өрістерге сілтемелерді (анықтамалық шектеулер - FOREIGN KEY) жазамыз, сонда пайдаланушы анықтамалық кітаптарда табылған идентификатор мәндерінің арасында жоқ мәндерді осы өрістерге жаза алмайды.

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ҚОСУ ШЕКТЕУЛІ FK_Employees_PositionID СЫРТҚЫ КІЛТ (PositionID) СІЛТЕМЕЛЕР Позициялар (ID)
Екінші өріс үшін де солай істейміз:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ҚОСУ ШЕКТЕУЛІ FK_Қызметкерлер_Департаментінің ИД СЫРТҚЫ КІЛТІ (Департамент идентификаторы) ӘДЕБИЕТТЕР Бөлімдер (ID)
Енді пайдаланушы осы өрістерге сәйкес каталогтан тек ID мәндерін енгізе алады. Тиісінше, жаңа бөлімді немесе лауазымды пайдалану үшін ол алдымен сәйкес каталогқа жаңа жазба қосуы керек. Өйткені позициялар мен бөлімдер енді каталогтарда бір данада сақталады, содан кейін атын өзгерту үшін оны тек каталогта өзгерту жеткілікті.

Анықтамалық шектеудің атауы әдетте құрама болып табылады, ол «FK_» префиксінен тұрады, содан кейін кестенің аты келеді, ал астын сызудан кейін сілтеме кестесінің идентификаторына сілтеме жасайтын өрістің атауы болады.

Идентификатор (ID) әдетте ішкі мән болып табылады, ол тек сілтемелер үшін пайдаланылады және онда қандай мән сақталады, көп жағдайда мүлдем бей-жай, сондықтан пайда болатын сандар тізбегіндегі саңылаулардан арылуға тырысудың қажеті жоқ. кестемен жұмыс кезінде, мысалы, анықтамалықтан жазбаларды жойғаннан кейін.

КЕСТЕНІ ӨЗГЕРТУ ҚОСУ ШЕКТЕУ шектеу_атауы СЫРТҚЫ КІЛТ (өріс1, өріс2, ...) СІЛТЕМЕЛЕР анықтамалық_кесте (өріс1, өріс2, ...)
Бұл жағдайда «дир_кесте» кестесінде бастапқы кілт бірнеше өрістердің комбинациясы арқылы көрсетіледі (өріс1, өріс2, ...).

Шындығында, енді PositionID және DepartmentID өрістерін каталогтардағы ID мәндерімен жаңартайық. Осы мақсат үшін DML UPDATE пәрменін қолданайық:

ЖАҢАРТУ e ОРНАТУ Позиция идентификаторы = (ҚАЙДАҒЫ позициялардан идентификаторды ТАҢДАУ Аты = e. Лауазым), Бөлім идентификаторы = (Бөлімдерден Идентификатор ТАҢДАУ ЖЕРДЕ Аты = e. Бөлім) Қызметкерлерден e.
Сұрауды орындау арқылы не болғанын көрейік:

Қызметкерлерден * ТАҢДАУ

Міне, PositionID және DepartmentID өрістері сәйкес позициялармен және идентификаторлары бар бөлімдермен толтырылады, Қызметкерлер кестесіндегі Лауазым және Бөлім өрістерінің қажеті жоқ, мына өрістерді жоюға болады:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ТҮСІРУ БАҒАН Лауазымы, Бөлім
Енді кесте келесі пішінді алды:

Қызметкерлерден * ТАҢДАУ

ID Аты Туған күн Электрондық пошта Позиция идентификаторы Бөлім идентификаторы
1000 Иванов И.И. NULL NULL 2 1
1001 Петров П.П. NULL NULL 3 3
1002 Сидоров С.С. NULL NULL 1 2
1003 Андреев А.А. NULL NULL 4 3

Анау. нәтижесінде біз артық ақпаратты сақтаудан құтылдық. Енді лауазымы мен бөлімдерінің нөмірлері бойынша біз анықтамалық кестелердегі мәндерді пайдалана отырып, олардың атауларын бірегей түрде анықтай аламыз:

ТАҢДАУ e.ID, e.Name, p.Name PositionName, d.Name БөлімАты Қызметкерлерден e СОЛ ЖЕТКІЗУ Бөлімшелер d ҚОСУЛЫ d.ID = e.DepartmentID СОЛ ҚОСЫЛУ Позициялар p ON p.ID = e.PositionID

Объектілер инспекторында біз осы кесте үшін жасалған барлық нысандарды көре аламыз. Осы жерден осы нысандармен әртүрлі манипуляцияларды орындауға болады – мысалы, нысандардың атын өзгерту немесе жою.

Сондай-ақ кестенің өзіне сілтеме жасай алатынын атап өткен жөн, яғни. рекурсивті сілтеме жасай аласыз. Мысалы, қызметкерлермен кестеге осы қызметкер бағынатын қызметкерді көрсететін басқа ManagerID өрісін қосамыз. Өріс жасайық:

ALTER TABLE Қызметкерлер ADD ManagerID int
Бұл өрісте NULL рұқсат етілген, мысалы, қызметкерден жоғары басшылар болмаса, өріс бос болады.

Енді «Қызметкерлер» кестесінде ШЕТЕЛДІК кілтті жасайық:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ҚОСУ ШЕКТЕУЛІ FK_Employees_ManagerID СЫРТҚЫ КІЛТІ (ManagerID) СІЛТЕМЕЛЕР Қызметкерлер (ID)
Енді диаграмма құрайық және онда кестелер арасындағы байланыстар қалай көрінетінін көрейік:

Нәтижесінде біз келесі суретті көруіміз керек (Қызметкерлер кестесі Лауазымдар мен Бөлімшелер кестелерімен байланыстырылған және сонымен бірге өзіне сілтеме жасайды):

Соңында, анықтамалық пернелер анықтамалық кестеде сілтеме жасалған жазбаны жою немесе жаңарту кезінде өзін қалай ұстау керектігін көрсететін ON DELETE CASCADE және ON UPDATE CASCADE қосымша опцияларын қамтуы мүмкін екенін атап өткен жөн. Егер бұл опциялар көрсетілмесе, біз басқа кестедегі сілтемелері бар жазбаның анықтамалық кестесіндегі идентификаторды өзгерте алмаймыз, сонымен қатар сілтемедегі барлық жолдарды жоймайынша, сілтемеден мұндай жазбаны жоя алмаймыз. бұл жазба немесе біз осы жолдардағы сілтемелерді басқа мәнге жаңартамыз.

Мысалы, FK_Employees_DepartmentID үшін ON DELETE CASCADE опциясымен кестені қайта жасайық:

DROP TABLE Қызметкерлер КЕСТЕНІ ЖАСАУ Қызметкерлер (ID int NULL ЕМЕС, Аты nvarchar (30), Туған күні, Электрондық пошта nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Қызметкерлері PRIMARY KEYRAINTDee (KEY_KEY__Қызметкерлердің FRIMARY KEYSTRAINTFOO) ) ӘДЕБИЕТТЕР Бөлімшелері (ID) КСКАДТЫ ЖОЮ, ШЕКТЕУ FK_Қызметкерлер_Позиция идентификаторы СІЛТЕМЕЛЕР Позициялар (ID), ШЕКТЕУ FK_Қызметкерлер_Менеджерінің ИД СЫРТҚЫ КІЛТІСІ (Менеджер00), FEREIGN КІЛТІСТІ (Емі0000) ШЕКТЕУ, "19550219", 2,1, NULL), (1001, N "Петров П.П.", "19831203", 3,3,1003), (1002 , N "Сидоров С.С.", "19760607", 1,2,1000) , (1003, Н «Андреев А.А.», «19820417», 4,3,1000)
Бөлімшелер кестесінен идентификаторы 3 бөлімді өшірейік:

ID = 3 болатын бөлімдерді ЖОЮ
Қызметкерлер кестесіндегі деректерді қарастырайық:

Қызметкерлерден * ТАҢДАУ

ID Аты Туған күн Электрондық пошта Позиция идентификаторы Бөлім идентификаторы ManagerID
1000 Иванов И.И. 1955-02-19 NULL 2 1 NULL
1002 Сидоров С.С. 1976-06-07 NULL 1 2 1000

Көріп отырғаныңыздай, 3-бөлімге арналған деректер де Қызметкерлер кестесінен жойылған.

ЖАҢАРТУ КАСКАДЫ опциясы ұқсас әрекет етеді, бірақ ол іздеудегі идентификатор мәні жаңартылған кезде жұмыс істейді. Мысалы, егер біз жұмыс каталогындағы позиция идентификаторын өзгертсек, онда Қызметкерлер кестесіндегі Департамент идентификаторы біз каталогта көрсеткен жаңа ID мәніне жаңартылады. Бірақ бұл жағдайда оны көрсету мүмкін емес, өйткені Бөлімдер кестесіндегі идентификатор бағанында IDENTITY опциясы бар, ол бізге келесі сұрауды орындауға мүмкіндік бермейді (бөлім идентификаторын 3-ке 30-ға өзгерту):

ЖАҢАЛЫҚТАР Бөлімдері SET ID = 30 ОНДА ID = 3
Ең бастысы - ON DELETE CASCADE және ON UPDATE CASCADE опцияларының мәнін түсіну. Мен бұл опцияларды өте сирек жағдайларда қолданамын және оларды сілтеме шектеуінде қолданар алдында мұқият ойлануды ұсынамын. егер жазбаны іздеу кестесінен байқаусызда жойсаңыз, бұл үлкен мәселелерге әкелуі және тізбекті реакция тудыруы мүмкін.

3-бөлімді қалпына келтірейік:

IDENTITY мәнін қосуға/өзгертуге рұқсат беру SET IDENTITY_INSERT Бөлімдерді ON INSERT Бөлімдерді (ID, Name) VALUES (3, N "IT") - IDENTITY мәнін қосу/өзгертуге тыйым салу SET IDENTITY_INSERT Бөлімдерді ӨШІРУ
TRUNCATE TABLE пәрмені арқылы Қызметкерлер кестесін толығымен тазалайық:

TRUNCATE TABLE Қызметкерлер
Тағы да, алдыңғы INSERT пәрменін пайдаланып, оған деректерді қайта жүктеңіз:

INSERT Қызметкерлерді (жеке куәлік, аты-жөні, туған күні, лауазымының идентификаторы, бөлім идентификаторы, менеджер идентификаторы) VALUES (1000, N "Иванов И.И.", "19550219", 2,1, NULL), (1001, N "Петров П.П." , "19831203", 3 ,3,1003), (1002, Н "Сидоров С.С.", "19760607", 1,2,1000), (1003, Н "Андреев А.А.", "19820417" , 4,3,1000)

Қорытындылайық

Қазіргі уақытта біздің білімімізге тағы бірнеше DDL пәрмендері қосылды:
  • Өріске IDENTITY қасиетін қосу – кесте үшін осы өрісті автоматты түрде толтыруға (есептеуіш өріс) мүмкіндік береді;
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы ҚОСУсипатты_өрістердің_тізімі - кестеге жаңа өрістерді қосуға мүмкіндік береді;
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы БАҒАНДЫ ТҮСІРУөріс_тізімі - кестеден өрістерді жоюға мүмкіндік береді;
  • КЕСТЕНІ ӨЗГЕРТУкесте_атауы ШЕКТЕУ ҚОСУшектеу_атауы ШЕТЕЛ КІЛТІ(өрістер) ӘДЕБИЕТТЕРсілтеме_кесте (өрістер) - кесте мен анықтамалық кесте арасындағы байланысты анықтауға мүмкіндік береді.

Басқа шектеулер - ЕРЕКШЕ, ӘДІСТЕМЕЛІК, ТЕКСЕРУ

UNIQUE шектеуімен берілген өрістегі немесе өрістер жиынындағы әрбір жолдың мәндері бірегей болуы керек деп айтуға болады. Қызметкерлер кестесі жағдайында электрондық пошта өрісіне мұндай шектеу қоюға болады. Электрондық поштаны мәндермен алдын ала толтырыңыз, егер олар әлі анықталмаған болса:

ЖАҢАРТУ Қызметкерлердің электрондық поштасын орнату = " [электрондық пошта қорғалған]"WHERE ID = 1000 ЖАҢАЛЫҚТАР ЖҰМЫСШЫСЫ ОРНАТУ Электрондық пошта =" [электрондық пошта қорғалған]"WHERE ID = 1001 ЖАҢАЛЫҚ ЖАҢАРТУ Қызметкерлердің электрондық поштаны орнатуы =" [электрондық пошта қорғалған]"WHERE ID = 1002 ЖАҢАЛЫҚ ЖАҢАРТУ Қызметкерлердің электрондық поштаны орнатуы =" [электрондық пошта қорғалған]«ҚАЙДА ИД = 1003
Енді сіз осы өріске бірегейлік шектеуін қоя аласыз:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ШЕКТЕУ ҚОСУ UQ_Employees_E.mail UNIQUE (Электрондық пошта)
Енді пайдаланушы бірнеше қызметкер үшін бір электрондық поштаны енгізе алмайды.

Бірегейлік шектеуі әдетте келесідей аталады - алдымен «UQ_» префиксі, содан кейін кестенің аты, ал астын сызудан кейін осы шектеу қолданылатын өрістің атауы болады.

Тиісінше, егер өрістер тіркесімі кесте жолдарының контекстінде бірегей болуы керек болса, онда біз оларды үтірмен бөліп тізімдейміз:

ALTER TABLE кесте_атауы ҚОСУ ШЕКТЕУ_атауы UNICE (өріс1, өріс2, ...)
Өріске ӘДІСТЕМЕЛІК шектеуді қосу арқылы жаңа жазбаны енгізу кезінде бұл өріс INSERT пәрменінің өрістер тізімінде көрсетілмесе, ауыстырылатын әдепкі мәнді орнатуға болады. Бұл шектеуді кестені құру кезінде тікелей орнатуға болады.

Қызметкерлер кестесіне жаңа Кездесу күні өрісін қосып, оны HireDate деп атайық және осы өрістің әдепкі мәні ағымдағы күн екенін айтайық:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер ҚОСУ Жалға алу күні күні НҰЛ ЕМЕС Әдепкі SYSDATETIME ()
Немесе HireDate бағаны бұрыннан бар болса, келесі синтаксисті пайдалануға болады:

КЕСТЕНДІ ӨЗГЕРТУ Қызметкерлер жалдау күні үшін Әдепкі ЖҮЙЕУ TIME () ҚОСУ
Мұнда мен шектеудің атын көрсетпедім, өйткені DEFAULT жағдайында мен бұл соншалықты маңызды емес деп санадым. Бірақ тату-тәтті істесең, ерінбей, кәдімгі ат қою керек деп ойлаймын. Бұл келесідей орындалады:

КЕСТЕНІ ӨЗГЕРТУ Қызметкерлер DF_Employees_HireDate ШЕКТЕУЛІ ҚОСУ.
Бұл баған бұрын болмағандықтан, ол әрбір жазбаға қосылғанда, ағымдағы күн мәні HireDate өрісіне кірістіріледі.

Жаңа жазбаны қосқанда, ағымдағы күн де ​​автоматты түрде енгізіледі, әрине, егер біз оны нақты орнатпасақ, яғни. бағандар тізімінде көрсетілмейді. Мұны қосылған мәндер тізімінде HireDate өрісін көрсетпей мысалмен көрсетейік:

ҚЫЗМЕТКЕРЛЕРДІ INSERT (ID, аты, электрондық поштасы) VALUES (1004, N "Сергеев С.С.", " [электрондық пошта қорғалған]")
Не болғанын көрейік:

Қызметкерлерден * ТАҢДАУ

ID Аты Туған күн Электрондық пошта Позиция идентификаторы Бөлім идентификаторы ManagerID Жалға алу күні
1000 Иванов И.И. 1955-02-19 и.иванов [электрондық пошта қорғалған] 2 1 NULL 2015-04-08
1001 Петров П.П. 1983-12-03 [электрондық пошта қорғалған] 3 4 1003 2015-04-08
1002 Сидоров С.С. 1976-06-07 [электрондық пошта қорғалған] 1 2 1000 2015-04-08
1003 Андреев А.А. 1982-04-17 [электрондық пошта қорғалған] 4 3 1000 2015-04-08
1004 Сергеев С.С. NULL [электрондық пошта қорғалған] NULL NULL NULL 2015-04-08

CHECK шектеуі өріске енгізілген мәндерді тексеру қажет болғанда қолданылады. Мысалы, бұл шектеуді қызметкердің идентификаторы (ID) болып табылатын персонал нөмірі өрісіне енгізейік. Осы шектеуді пайдалана отырып, персонал саны 1000 мен 1999 арасындағы мәнге ие болуы керек делік:

ӨЗГЕРТУ КЕСТЕСІ Қызметкерлер ҚОСУ ШЕКТЕУЛІ CK_Employees_ID CHECK (ID 1000 ЖӘНЕ 1999 АРАСЫНДА)
Шектеу әдетте бірдей аталады, алдымен «CK_» префиксі келеді, содан кейін кестенің аты және осы шектеу қойылған өрістің атауы.

Шектеу жұмыс істеп тұрғанын тексеру үшін жарамсыз жазбаны енгізуге тырысайық (сәйкес қатені алуымыз керек):

Қызметкерлердің (ID, электрондық пошта) VALUES INSERT (2000, " [электрондық пошта қорғалған]")
Енді енгізілген мәнді 1500-ге өзгертіп, жазба енгізілгеніне көз жеткізейік:

Қызметкерлердің (ID, электрондық пошта) VALUES INSERT (1500, " [электрондық пошта қорғалған]")
Сондай-ақ атауды көрсетпей UNIQUE және CHECK шектеулерін жасауға болады:

ALTER TABLE Қызметкерлер бірегей (Электрондық пошта) ALTER TABLE ҚОСУ.
Бірақ бұл жақсы тәжірибе емес және шектеудің атын анық көрсеткен дұрыс, өйткені оны кейінірек анықтау үшін, бұл қиынырақ болады, объектіні ашып, оның не үшін жауапты екенін көру керек.

Жақсы атаумен шектеу туралы көптеген ақпаратты оның атымен тікелей тануға болады.

Және сәйкесінше, бұл шектеулердің барлығы кестені құру кезінде, егер ол бұрыннан жоқ болса, дереу жасалуы мүмкін. Кестені жойайық:

DROP TABLE Қызметкерлер
Біз оны барлық жасалған шектеулермен бір CREATE TABLE пәрменімен қайта жасаймыз:

CREATE TABLE Қызметкерлер (ID int NOT NULL, Name nvarchar (30), Туған күн, Email nvarchar (30), PositionID int, Департамент идентификаторы int, Жалға алу күні NULL ЕМЕС Әдепкі SYSDATETIME (), - DEFAULT үшін мен CONSTRAINTEY_KSTRAINTyee PK, PKS_LOGS қоспағанда, шығарамын. (ID), CONSTRAINT FK_Employees_DepartmentID СЫРТҚЫ КІЛТІ (Бөлім идентификаторы) СІЛТЕМЕЛЕР Бөлімдер (ID), ШЕКТЕУ FK_Қызметкерлер_позициясы идентификаторы СЫРТҚЫ КІЛТІ (Позиция идентификаторы) СІЛТЕМЕЛЕР Позициялар (ID), CONSTRAINT UQ_Email (UQ_Email) CONSTRAINT

INSERT Қызметкерлерді (жеке куәлік, аты-жөні, туған күні, электрондық поштасы, лауазымының идентификаторы, бөлім идентификаторы) VALUES (1000, N "Иванов И.И.", "19550219", " [электрондық пошта қорғалған]", 2,1), (1001, Н" Петров П.П. "," 19831203 "," [электрондық пошта қорғалған]", 3,3), (1002, Н" Сидоров С.С. "," 19760607 "," [электрондық пошта қорғалған]", 1,2), (1003, Н" Андреев А.А. "," 19820417 "," [электрондық пошта қорғалған]",4,3)

PRIMARY KEY және UNIQUE шектеулерін жасау кезінде жасалған индекстер туралы біраз

Жоғарыдағы скриншотта көріп отырғаныңыздай, PRIMARY KEY және UNIQUE шектеулерін жасау кезінде бірдей атаулары бар индекстер (PK_Employees және UQ_Employees_Email) автоматты түрде жасалды. Әдепкі бойынша, бастапқы кілттің индексі КЛАСТЕРДІ, ал барлық басқа индекстер үшін КЛЮСТЕРДІК ретінде жасалады. Айта кету керек, барлық ДҚБЖ-да кластерлік индекс тұжырымдамасы жоқ. Кестеде тек бір КЛАСТЕРДІК индекс болуы мүмкін. CLUSTERED – кесте жазбалары осы индекс бойынша сұрыпталатынын білдіреді, сонымен қатар бұл индекстің барлық кесте деректеріне тікелей қатынасы бар деп айтуға болады. Бұл кестенің негізгі көрсеткіші, былайша айтқанда. Дәлірек айтқанда, бұл кестеге бекітілген индекс. Кластерленген индекс сұрауларыңызды оңтайландыруға көмектесетін өте қуатты құрал, оны әзірше есте сақтаңыз. Егер біз кластерленген индексті бастапқы кілтте емес, басқа индекс үшін пайдалануды айтқымыз келсе, онда бастапқы кілтті жасау кезінде КЛАСТЕРЛІК ЕМЕС опцияны көрсету керек:

ALTER TABLE кесте_атауы ҚОСУ ШЕКТЕУЛІ_атауы БАСТАУЫШ КҮЙЕУ КЛУСТЕРЛІК ЕМЕС (өріс1, өріс2, ...)
Мысалы, PK_Employees шектеу индексін кластерлік емес және UQ_Employees_Email шектеу индексін кластерлік етейік. Ең алдымен, біз бұл шектеулерді алып тастаймыз:

ALTER TABLE Employees TROP CONSTRAINT PK_Employees ALTER TABLE Қызметкерлер DOP ШЕКТЕУ UQ_Employees_email.
Енді оларды CLUSTERED және NONCLUSTERED опцияларымен жасайық:

ALTER TABLE Қызметкерлер ШЕКТЕУЛІ ҚОСУ PK_Қызметкерлер БІРІНШІ КЛАСТЕРЛІК ЕМЕС (ID) ALTER TABLE Қызметкерлер ШЕКТЕУЛІ ҚОСУ UQ_Employees_Электрондық пошта Бірегей кластерленген (Электрондық пошта)
Енді, Қызметкерлер кестесінен алынғаннан кейін, жазбалардың кластерленген UQ_Employees_Email индексі бойынша сұрыпталғанын көреміз:

Қызметкерлерден * ТАҢДАУ

ID Аты Туған күн Электрондық пошта Позиция идентификаторы Бөлім идентификаторы Жалға алу күні
1003 Андреев А.А. 1982-04-17 [электрондық пошта қорғалған] 4 3 2015-04-08
1000 Иванов И.И. 1955-02-19 [электрондық пошта қорғалған] 2 1 2015-04-08
1001 Петров П.П. 1983-12-03 [электрондық пошта қорғалған] 3 3 2015-04-08
1002 Сидоров С.С. 1976-06-07 [электрондық пошта қорғалған] 1 2 2015-04-08

Бұған дейін PK_Employees индексі кластерленген индекс болған кезде, жазбалар әдепкі бойынша идентификатор бойынша сұрыпталған.

Бірақ бұл жағдайда бұл кластерленген индекстің мәнін көрсететін мысал ғана, өйткені сірә, сұраулар Қызметкерлер кестесіне идентификатор өрісі арқылы жасалады және кейбір жағдайларда оның өзі анықтамалық ретінде әрекет етуі мүмкін.

Іздеу үшін әдетте кластерленген индексті бастапқы кілтте құрастырған жөн, өйткені сұрауларда біз, мысалы, атауды (Лауазым, Бөлім) алу үшін жиі каталог идентификаторына жүгінеміз. Міне, біз жоғарыда жазғанымды еске түсіреміз, кластерленген индекс кестенің жолдарына тікелей қол жеткізе алады және осыдан қосымша үстеме шығындарсыз кез келген бағанның мәнін алуға болады.

Ең жиі таңдалған өрістерге кластерленген индексті қолдану тиімді.

Кейде кілт кестелерде суррогат өріс арқылы жасалады, бұл жағдайда анағұрлым қолайлы индекс үшін CLUSTERED индекс опциясын сақтау және суррогат бастапқы кілтті жасау кезінде КЛАСТЕРЛІК ЕМЕС опцияны көрсету пайдалы болады.

Қорытындылайық

Бұл кезеңде біз «ALTER TABLE table_name ADD COSTRAINT constraint_name...» пішімінің пәрмені арқылы құрылатын қарапайым түрде шектеулердің барлық түрлерімен таныстық:
  • БАСТЫҚТЫ КІЛТ- бастапқы кілт;
  • ШЕТЕЛ КІЛТІ- сілтемелерді орнату және деректердің анықтамалық тұтастығын бақылау;
  • ЕРЕКШЕ- бірегейлікті жасауға мүмкіндік береді;
  • ТЕКСЕРУ- енгізілген мәліметтердің дұрыстығына мүмкіндік береді;
  • Әдепкі- әдепкі мәнді орнатуға мүмкіндік береді;
  • Сондай-ақ, барлық шектеулерді пәрмен арқылы жоюға болатынын атап өткен жөн. КЕСТЕНІ ӨЗГЕРТУкесте_атауы ҚОСУ ШЕКТЕУЛІшектеу_атауы ".
Біз сондай-ақ индекстер тақырыбына ішінара тоқталып, кластер түсінігіне талдау жасадық ( КЛАСТЕРДІ) және кластерлік емес ( КЛАСТЕРЛІК ЕМЕС) индекс.

Оқшау индекстерді жасаңыз

Мұндағы өзіндік сенімділік БАСТАУЫШ КҮЙЕУ немесе БІРЕКЕ шектеу үшін жасалмаған индекстерге сілтеме жасайды.

Өріс немесе өрістер бойынша индекстерді келесі пәрмен арқылы жасауға болады:

КӨРСЕТУ INDEX IDX_Employees_Name ON Қызметкерлер (аты-жөні)
Сондай-ақ мұнда КЛАСТЕРЛІК, КЛАСТЕРЛІК ЕМЕС, БІРЕКЕ опцияларды көрсетуге болады, сонымен қатар әрбір жеке өріс үшін ASC (әдепкі бойынша) немесе DESC сұрыптау бағытын көрсетуге болады:

Бірегей КЛАСТЕРЛІК ЕМЕС ИНДЕКС ЖАСАУ UQ_Employees_EmailDesc ON Қызметкерлер (электрондық пошта DESC)
Кластерленбеген индексті жасаған кезде, КЛАСТЕРЛІК ЕМЕС опцияны шығаруға болады, себебі бұл әдепкі болып табылады және бұл жерде жай ғана КЛАСТЕРДЕНГЕН немесе КЛАСТЕРЛІК ЕМЕС опцияның пәрмендегі орнын көрсету үшін көрсетілген.

Төмендегі пәрмен арқылы индексті жоюға болады:

DROP INDEX IDX_Employees_Name ON Қызметкерлер
Қарапайым индекстерді, шектеулер сияқты, CREATE TABLE командасының контекстінде жасауға болады.

Мысалы, кестені қайтадан түсірейік:

DROP TABLE Қызметкерлер
Біз оны бір CREATE TABLE пәрменімен барлық жасалған шектеулермен және индекстермен қайта жасаймыз:

КЕСТЕ ЖАСАУ Қызметкерлер (ID int NULL ЕМЕС, Аты nvarchar (30), Туған күні, Электрондық пошта nvarchar (30), PositionID int, Департамент идентификаторы int, Жалға алу күні NULL ЕМЕС ШЕКТЕУЛЕР DF_Employees_HireDate DEFAULT SYSDATETYe, KONSERIST SYSDATE, KYe. ШЕКТЕУ FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) СІЛТЕМЕЛЕР Департаменттер (ID), ШЕКТЕУ FK_Employees_PositionID FOREIGN KEY (PositionID) СІЛТЕМЕЛЕР позициялар (ID), ШЕКТЕУ FK_Employees_ManagerID FOREIGN KEY (Email) тексеріңіз (1000 және 1999 жылдар аралығында ID), INDEX IDX_Employees_Name (атауы))
Соңында қызметкерлерімізді кестеге енгізейік:

Қызметкерлерді INSERT (ID, аты, туған күні, электрондық поштасы, лауазымының идентификаторы, бөлім идентификаторы, менеджер идентификаторы) VALUES (1000, N "Иванов И.И.", "19550219", " [электрондық пошта қорғалған]", 2,1, NULL), (1001, Н" Петров П.П. "," 19831203 "," [электрондық пошта қорғалған]", 3,3,1003), (1002, Н" Сидоров С.С. "," 19760607 "," [электрондық пошта қорғалған]", 1,2,1000), (1003, Н" Андреев А.А. "," 19820417 "," [электрондық пошта қорғалған]",4,3,1000)
Сонымен қатар, мәндерді INCLUDE ішінде көрсету арқылы кластерлік емес индекске қосуға болатынын ескерген жөн. Анау. бұл жағдайда INCLUDE индексі біршама кластерленген индекске ұқсайды, тек қазір индекс кестеге бекітілмеген, бірақ қажетті мәндер индекске бекітілген. Тиісінше, мұндай индекстер таңдау сұраныстарының (ТАҢДАУ) өнімділігін айтарлықтай жақсарта алады, егер барлық тізімделген өрістер индексте болса, онда кестеге мүлдем кіру қажет болмауы мүмкін. Бірақ бұл индекстің көлемін табиғи түрде арттырады, өйткені тізімделген өрістердің мәндері индексте қайталанады.

MSDN үзіндісі.Индекстерді құруға арналған жалпы команда синтаксисі

[ЕРЕКШЕ] [КЛАСТЕРЛІК | NONCLUSTERED] INDEX index_name ON (баған [ASC | DESC] [, ... n]) [ҚОСУ (баған_атауы [, ... n])]

Қорытындылайық

Индекстер деректерді іздеу жылдамдығын (SELECT) арттыра алады, бірақ индекстер кесте деректерін өзгерту жылдамдығын баяулатады, өйткені әрбір өзгертуден кейін жүйеге белгілі бір кесте үшін барлық индекстерді қайта құру қажет болады.

Әрбір жағдайда таңдау өнімділігі де, деректерді өзгерту де тиісті деңгейде болуы үшін оңтайлы шешімді, алтын ортаны тапқан жөн. Индекстерді құру стратегиясы және олардың саны көптеген факторларға байланысты болуы мүмкін, мысалы, кестедегі деректер қаншалықты жиі өзгереді.

DDL қорытындысы

Көріп отырғаныңыздай, DDL бірінші көзқараста көрінетіндей күрделі емес. Мұнда мен тек үш кестені пайдалана отырып, оның барлық дерлік негізгі конструкцияларын көрсете алдым.

Ең бастысы - мәнін түсіну, ал қалғаны тәжірибе мәселесі.

SQL деп аталатын осы тамаша тілде сәттілік тілейміз.

Менің блог сайтыма қош келдіңіз. Бүгін біз жаңадан бастаушыларға арналған SQL сұраулары туралы сөйлесетін боламыз. Кейбір веб-шеберлердің сұрақтары болуы мүмкін. Неліктен sql тілін үйрену керек? Сіз жасай алмайсыз ба?

Кәсіби интернет-жоба жасау үшін бұл жеткіліксіз болып шықты. Sql дерекқорлармен жұмыс істеу және WordPress қосымшаларын жасау үшін қолданылады. Сұрауларды қалай пайдалану керектігін егжей-тегжейлі қарастырайық.

Бұл не

Sql – құрылымдық сұрау тілі. Деректер түрін анықтауға, оларға қол жеткізуді қамтамасыз етуге және қысқа мерзімде ақпаратты өңдеуге арналған. Ол Интернет жобасында көргіңіз келетін құрамдас бөліктерді немесе нәтижелердің қандай да бір түрін сипаттайды.

Қарапайым тілмен айтқанда, бұл бағдарламалау тілі мәліметтер базасына ақпаратты қосуға, өзгертуге, іздеуге және көрсетуге мүмкіндік береді. Mysql-дің танымалдылығы оның мәліметтер базасы негізінде динамикалық интернет-жобаларды құру үшін пайдаланылуымен байланысты. Сондықтан функционалды блогты дамыту үшін осы тілді үйрену керек.

Не істей алады

Sql тілі мүмкіндік береді:

  • кестелер құру;
  • әртүрлі деректерді қабылдауды және сақтауды өзгерту;
  • ақпаратты блоктарға біріктіру;
  • деректерді қорғау;
  • қол жеткізуде сұраныстарды жасау.

Маңызды! Sql-мен айналысқаннан кейін сіз кез келген күрделіліктегі WordPress қосымшаларын жаза аласыз.

Қандай құрылым

Деректер базасы Excel файлы ретінде ұсынылуы мүмкін кестелерден тұрады.

Оның аты, бағандары және кейбір ақпараты бар жолы бар. Мұндай кестелерді sql сұраулары арқылы жасауға болады.

Нені білу керек


Sql тілін үйрену кезіндегі ерекшеліктер

Жоғарыда айтылғандай, сұраныстар кестелерден тұратын мәліметтер қорына жаңа ақпаратты өңдеу және енгізу үшін қолданылады. Оның әрбір жолы жеке жазба болып табылады. Сонымен, мәліметтер базасын құрайық. Ол үшін пәрменді жазыңыз:

«bazaname» дерекқорын құру

Тырнақшаға мәліметтер қорының атын латын тілінде жазыңыз. Оған мағыналы есім табуға тырысыңыз. «111», «www» және т.б. сияқты базаны жасамаңыз.

Дерекқорды жасағаннан кейін орнатыңыз:

АТТАРДЫ ОРНАТУ ‘utf-8’

Бұл сайттағы мазмұнды дұрыс көрсету үшін қажет.

Енді біз кесте жасаймыз:

'bazaname' КЕСТЕСІН ЖАСАУ. «Кесте» (

id INT (8) NULL ЕМЕС AUTO_INCREMENT БАСТАУЫШ КҮЙЕУІ,

журнал VARCHAR (10),

VARCHAR өту (10),

күні DATE

Екінші жолда біз үш атрибут жаздық. Олардың нені білдіретінін көрейік:

  • NOT NULL атрибуты ұяшық бос болмайтынын білдіреді (бұл өріс қажет);
  • AUTO_INCREMENT мәні - автотолтыру;
  • PRIMARY KEY — бастапқы кілт.

Ақпаратты қалай қосуға болады

Құрылған кестенің өрістерін мәндермен толтыру үшін INSERT операторын пайдаланыңыз. Біз кодтың келесі жолдарын жазамыз:

«Кестеге» КІРУ

(логин, өту, күні) VALUES

(«Васа», '87654321 ', ' 21.06.2017 18:38:44 ');

Жақшада біз бағандардың атауларын, ал келесіде - мәндерді көрсетеміз.

Маңызды! Баған атаулары мен мағыналарының ретін қадағалаңыз.

Ақпаратты қалай жаңартуға болады

Ол үшін UPDATE пәрменін пайдаланыңыз. Белгілі бір пайдаланушы үшін құпия сөзді қалай өзгерту керектігін көрейік. Біз кодтың келесі жолдарын жазамыз:

ЖАҢАРТУ «кесте» SET рұқсаты = ‘12345678’ ҚАЙДА id = ‘1’

Енді '12345678' құпия сөзін өзгертіңіз. Өзгерістер «id» = 1 жолында жасалады. WHERE пәрменін жазбасаңыз, белгілі бір жол емес, барлық жолдар өзгереді.

Кітапты сатып алуға кеңес беремін» Dummies үшін SQL «. Оның көмегімен сіз кезең-кезеңімен мәліметтер қорымен кәсіби түрде жұмыс жасай аласыз. Барлық ақпарат қарапайымнан күрделіге қарай құрылымдалған және жақсы қабылданатын болады.

Жазбаны қалай жоюға болады

Егер сіз бірдеңені қате жазсаңыз, оны ЖОЮ пәрменімен түзетіңіз. UPDATE сияқты жұмыс істейді. Біз келесі кодты жазамыз:

ID = '1' болатын «кестеден» ЖОЮ

Ақпарат алынуда

Мәндерді дерекқордан алу үшін ТАҢДАУ пәрменін пайдаланыңыз. Біз келесі кодты жазамыз:

'Кестеден' * ТАҢДАҢЫЗ, WHERE id = '1'

Бұл мысалда кестедегі барлық қолжетімді өрістерді таңдаймыз. Бұл командада жұлдызшаны «*» жазсаңыз орын алады. Кейбір үлгі мәнін таңдау қажет болса, біз келесідей жазамыз:

ТАҢДАУ журналы, кестеден өту WHERE id = '1'

Айта кету керек, мәліметтер базасымен жұмыс істеу қабілеті жеткіліксіз болады. Кәсіби интернет-жобаны жасау үшін деректер қорынан деректерді беттерге қосуды үйрену керек. Ол үшін php веб-бағдарламалау тілімен танысыңыз. Бұл сізге көмектеседі Михаил Русаковтың сыныптық курсы .


Үстелді тастау

DROP сұрауымен орын алады. Ол үшін келесі жолдарды жазыңыз:

DROP TABLE кестесі;

Кестеден белгілі бір шартқа сәйкес жазбаны шығару

Мынадай кодты қарастырыңыз:

Кестеден ИД, елді, қаланы ТАҢДАҢЫЗ адамдар > 150000000

Онда халқы жүз елу миллионнан асатын елдердің жазбалары көрсетіледі.

Қауымдастық

Join көмегімен бірнеше кестелерді біріктіруге болады. Бұл қалай жұмыс істейді, толығырақ мына бейнені қараңыз:

PHP және MySQL

Интернет-жобаны құру кезінде сұрау салу әдеттегі нәрсе екенін тағы бір рет атап өткім келеді. Оларды php құжаттарында пайдалану үшін келесі процедураны орындаңыз:

  • mysql_connect () командасы арқылы мәліметтер базасына қосыламыз;
  • mysql_select_db () көмегімен қажетті дерекқорды таңдаңыз;
  • Біз сұрауды mysql_fetch_array () арқылы өңдейміз;
  • Байланысты mysql_close () командасымен жабамыз.

Маңызды! Мәліметтер қорымен жұмыс істеу қиын емес. Бастысы өтінішті дұрыс жазу.

Жаңадан бастаған веб-шеберлер ойлайды. Бұл тақырыпта не оқу керек? Мен Мартин Грабердің кітабын ұсынғым келеді. SQL қарапайым адамдар үшін «. Жаңадан бастағандарға бәрі түсінікті болатындай етіп жазылған. Оны анықтамалық ретінде пайдаланыңыз.

Бірақ бұл теория. Іс жүзінде жағдай қандай? Шындығында, интернет-жобаны жасау ғана емес, сонымен қатар Google мен Яндекстің ТОП-қа шығуы керек. Бейне курс « Веб-сайтты құру және жылжыту ».


Бейне нұсқау

Әлі де сұрақтарыңыз бар ма? Толығырақ онлайн бейнені қараңыз.

Қорытынды

Сонымен, sql сұрауларын жазу қиын емес сияқты, бірақ кез келген веб-шебер мұны істеуі керек. Бұл жоғарыда сипатталған бейне курстарға көмектеседі. Жазылу менің ВКонтакте тобым жаңа қызықты ақпараттың пайда болуы туралы бірінші болып білу.

Қазіргі заманғы веб-қосымшалардың көпшілігі дерекқорлармен әрекеттеседі, әдетте тіл деп аталады SQL. Бақытымызға орай, бұл тілді үйрену өте оңай. Бұл мақалада біз қарапайымды қарастырамыз SQL сұраулар және оларды өзара әрекеттесу үшін қалай пайдалану керектігін үйреніңіз MySQL деректер қоры.

Саған не қажет?

SQL (құрылымдық сұрау тілі) сияқты дерекқорды басқару жүйелерімен әрекеттесу үшін арнайы жасалған тіл MySQL, Oracle, Sqlite және басқалар ... Орындау SQL осы мақаладағы сұраулар, мен сізге орнатуға кеңес беремін MySQL жергілікті компьютерге. Сондай-ақ пайдалануды ұсынамын phpMyAdmin визуалды интерфейс ретінде.

Мұның бәрі әр адамның сүйікті Денверінде бар. Менің ойымша, бұл не екенін және оны қайдан алуға болатынын бәрі білуі керек :). мүмкінәйтпесе WAMP немесе MAMP пайдаланыңыз.

Денверде кіріктірілген MySQL консоль. Біз оны қолданамыз.

ДЕРЕКТЕР БАЗЫН ҚҰРУ:мәліметтер базасын құру

Бұл бірінші өтінішіміз. Біз әрі қарай жұмыс істеу үшін бірінші дерекқорымызды жасаймыз.

Біріншіден, ашыңыз MySQL консоль және логин. Үшін WAMP әдепкі құпия сөз бос. Яғни, ештеңе :). Үшін MAMP - бұл «түбір». Денвер үшін нақтылау қажет.

Жүйеге кіргеннен кейін келесі жолды енгізіп, басыңызЕнгізіңіз:

ДЕРЕКТЕР ҚОРЫН ЖАСАУ my_first_db;

Басқа тілдердегі сияқты сұраудың соңына нүктелі үтір (;) қойылатынын ескеріңіз.

Сондай-ақ SQL пәрмендерін қараңыз регистрге сезгіш. Біз оларды үлкен әріптермен жазамыз.

Опция тек: Таңбалар жинағыжәне Салыстыру

Орнатқыңыз келсетаңбалар жиыны және сұрыптау болуы мүмкін келесі пәрменді жазыңыз:

ДЕРЕКТЕР ҚОРЫН ЖАСАУ my_first_db Әдепкі таңбалар жиыны utf8 COLLATE utf8_general_ci;

Қолдау көрсетілетін таңбалар жиынының тізімін табады MySQL.

ДЕРЕКТЕР ҚОРЫН КӨРСЕТУ:барлық деректер қорын тізімдейді

Бұл пәрмен барлық қолжетімді дерекқорларды көрсету үшін пайдаланылады.

DROP ДЕРЕКТЕР БАЗАСЫ:дерекқорды жою

Осы сұрауды пайдаланып бұрыннан бар ДҚ тастауға болады.

Бұл пәрменді абайлаңыз, себебі ол ескертусіз жұмыс істейді. Егер дерекқорда деректер болса, олардың барлығы жойылады.

ҚОЛДАНУ:Мәліметтер базасын таңдау

Техникалық тұрғыдан бұл сұрау емес, оператор және соңында нүктелі үтірді қажет етпейді.

Бұл MySQL туралы айтады ағымдағы сеанс үшін әдепкі дерекқорды таңдаңыз. Енді біз кестелерді құруға және деректер қорымен басқа әрекеттерді орындауға дайынбыз.

Мәліметтер қорындағы кесте дегеніміз не?

МҚ-дағы кестені келесідей көрсетуге болады Excel файлы.

Суреттегідей кестелерде баған атаулары, жолдар және ақпарат бар. Көмегімен SQL сұраулар, біз осындай кестелерді жасай аламыз. Біз сондай-ақ ақпаратты қосуға, оқуға, жаңартуға және жоюға болады.

КЕСТЕ ҚҰРУ: Кестені құру

C осы сұранысты пайдалана отырып, біз мәліметтер базасында кестелер жасай аламыз. Кешіріңіз, құжаттама MySQL бұл мәселе жаңадан бастаушылар үшін өте түсінікті емес. Бұл сұрау түрінің құрылымы өте күрделі болуы мүмкін, бірақ біз оңайдан бастаймыз.

Келесі сұрау 2 бағаннан тұратын кестені жасайды.

CREATE TABLE пайдаланушылары (пайдаланушы аты VARCHAR (20), құру_күні DATE);

Сұрауларымызды бірнеше жолға және шегініс үшін қойындылармен жаза алатынымызды ескеріңіз.

Бірінші жол қарапайым. Біз жай ғана «пайдаланушылар» деп аталатын кестені жасаймыз. Әрі қарай, жақша ішінде үтірмен бөлінген барлық бағандардың тізімі бар. Әрбір баған атауынан кейін бізде VARCHAR немесе DATE сияқты ақпарат түрлері болады.

VARCHAR (20) бағанның жол типті екенін және ұзындығы ең көбі 20 таңба болуы мүмкін екенін білдіреді. DATE да күндерді осы форматта сақтау үшін пайдаланылатын ақпарат түрі болып табылады: "ЖЖЖЖ - АА-КК".

НЕГІЗГІ КҮЙСЕ ( бастапқы кілтз)

Келесі сұрауды орындамас бұрын, негізгі кілтіміз болатын "user_id" бағанын қосуымыз керек. БАСТАУЫШ КІЛТІ кестенің әрбір жолын анықтау үшін пайдаланылатын ақпарат ретінде қарастыруға болады.

CREATE TABLE пайдаланушылары (user_id INT AUTO_INCREMENT PRIMARY KEY, пайдаланушы аты VARCHAR (20), құру_күні DATE);

INT 32 биттік бүтін типті жасайды (сандар сияқты). AUTO_INCREMENT жаңа мәнді автоматты түрде жасайды ID біз ақпараттың жаңа жолын қосқан сайын. Бұл міндетті емес, бірақ ол бүкіл процесті жеңілдетеді.

Бұл бағанның бүтін мән болуы міндетті емес, бірақ ол жиі пайдаланылады. Бастапқы кілттің болуы да міндетті емес, бірақ ол дерекқордың архитектурасы мен өнімділігі үшін ұсынылады.

Сұрауды орындаймыз:

Кестелерді КӨРСЕТУ:барлық кестелерді көрсету

Бұл сұрау деректер қорындағы кестелер тізімін алуға мүмкіндік береді.

ТҮСІНДІРУ:Кесте құрылымын көрсету

Бұл сұрауды бұрыннан бар кестенің құрылымын көрсету үшін пайдалануға болады.

Бағандар барлық сипаттарымен бірге көрсетіледі.

КЕСТЕН ​​ТҮСІРУ:кестені жою

DROP DATABASES сияқты, бұл сұрау кестені және оның мазмұнын ескертусіз жояды.

КЕСТЕНІ ӨЗГЕРТУ: кестені өзгерту

Бұл сұрау кестеге көбірек өзгертулер енгізуге байланысты күрделі құрылымды қамтуы мүмкін. Кейбір мысалдарды қарастырайық.

(егер кестені соңғы қадамда жойсаңыз, оны сынақтар үшін қайта жасаңыз)

БАҒАН ҚОСУ

ALTER TABLE пайдаланушылары пайдаланушы атынан КЕЙІН VARCHAR (100) электрондық поштасын ҚОСУ;

SQL жақсы оқылатындықтан, оны егжей-тегжейлі түсіндірудің қажеті жоқ деп ойлаймын. «Пайдаланушы аты» дегеннен кейін жаңа «электрондық пошта» бағанасын қосамыз.

БАҒАНДЫ ЖОЮ

Бұл да өте оңай болды. Бұл сұрауды сақтықпен пайдаланыңыз, себебі сіз ескертусіз деректерді жоя аласыз.

Қосымша тәжірибе үшін жаңа ғана жойылған бағанды ​​қалпына келтіріңіз.

БАҒАНҒА ӨЗГЕРІС ЕНГІЗУ

Кейде сіз бағанның сипаттарына өзгертулер енгізгіңіз келуі мүмкін және бұл үшін оны толығымен жоюдың қажеті жоқ.

Бұл сұрау пайдаланушы бағанының атын "пайдаланушы_аты" деп өзгертті және оның түрін VARCHAR (20) орнына VARCHAR (30) етіп өзгертті. Мұндай өзгерту кестедегі деректерді өзгертпеуі керек.

INSERT: Кестеге ақпарат қосу

Төмендегі сұранысты пайдаланып кестеге кейбір ақпаратты қосамыз.

Көріп отырғаныңыздай, VALUES () үтірмен бөлінген мәндер тізімін қамтиды. Барлық мәндер бір бағандарда. Және мәндер кесте жасалған кезде анықталған бағандардың ретімен болуы керек.

PRIMARY KEY өрісі үшін бірінші NULL мәні "user_id" деп аталатынын ескеріңіз. Біз мұны идентификатор автоматты түрде жасалуы үшін жасаймыз, себебі бағанда AUTO_INCREMENT сипаты бар. Ақпарат бірінші рет қосылғанда идентификатор 1 болады. Келесі жол 2 және т.с.с.

БААЛМА ОПЦИЯ

Жолдарды қосу үшін басқа сұрау опциясы бар.

Бұл жолы біз VALUES орнына SET кілт сөзін қолданамыз және онда жақша жоқ. Бірнеше нюанстар бар:

Бағанды ​​өткізіп жіберуге болады. Мысалы, біз оның AUTO_INCREMENT мәніне әдепкі болатын "user_id" мәнін тағайындаған жоқпыз. VARCHAR бағанын өткізіп алсаңыз, бос жол қосылады.

Әрбір баған атымен аталу керек. Осыған байланысты оларды алдыңғы нұсқадан айырмашылығы кез келген ретпен атауға болады.

2-БАМА НҰСҚА

Міне, тағы бір нұсқа.

Қайтадан, баған атауына сілтемелер болғандықтан, мәндерді кез келген ретпен беруге болады.

LAST_INSERT_ID ()

Бұл сұрауды ағымдағы сеанстың соңғы жолы үшін AUTO_INCREMENT болатын идентификаторды алу үшін пайдалануға болады.

ҚАЗІР ()

Қазір MySQL функциясын сұрауларда қалай пайдалануға болатынын көрсететін уақыт.

NOW () функциясы ағымдағы күнді көрсетеді. Осылайша сіз оны жаңа жолды енгізген кезде баған күнін ағымдағы күнге автоматты түрде орнату үшін пайдалана аласыз.

Назар аударыңыз, біз 1 ескерту алдық, бірақ оны елемеңіз. Мұның себебі NOW () уақытша ақпаратты көрсету үшін де қолданылады.

ТАҢДАУ: Кестеден мәліметтерді оқу

Кестеге ақпаратты қоссақ, оны оқуды сол жерден үйрену қисынды болар еді. Бұл жерде SELECT сұрауы бізге көмектеседі.

Төменде кестені оқуға болатын ең қарапайым ТАҢДАУ сұрауы берілген.

Бұл жағдайда жұлдызша (*) кестедегі барлық өрістерді сұрағанымызды білдіреді. Тек арнайы бағандарды алғыңыз келсе, сұрау келесідей болады.

ШартҚАЙДА

Көбінесе бізді барлық бағандар қызықтырмайды, бірақ кейбіреулері ғана. Мысалы, біз тек "nettuts" пайдаланушысының электрондық пошта мекенжайын алғымыз келеді делік.

WHERE сұрауда шарттарды орнатуға және егжей-тегжейлі таңдаулар жасауға мүмкіндік береді.

Бір теңдік белгісі (=) теңдік үшін бағдарламалаудағыдай екі емес, қолданылатынын ескеріңіз.

Сіз сондай-ақ салыстыруларды пайдалана аласыз.

ЖӘНЕ немесе НЕМЕСЕ шарттарды біріктіру үшін қолданылуы мүмкін:

Сандық мәндер тырнақшаға алынбауы керек екенін ескеріңіз.

IN ()

Бұл бірнеше мәндерді таңдау үшін пайдалы.

ЛАЙК

«қойылмалы таңба» сұрауларын жасауға мүмкіндік береді

% белгісі қойылмалы таңба ретінде пайдаланылады. Яғни, кез келген нәрсе өз орнында болуы мүмкін.

ШартБОЙЫНША СҰРЫПТАУ

Кез келген критерий бойынша сұрыпталған нәтижені алғыңыз келсе

Әдепкі рет - ASC (төменнен жоғарыға дейін). Керісінше DESC қолданылады.

ШЕКТЕУ ... ОФСЕТ ...

Алынған нәтижелер санын шектей аласыз.

LIMIT 2 тек алғашқы 2 нәтижені алады. ШЕК 1 ОФСЕТ 2 алғашқы 2 нәтижеден кейін 1 нәтиже алады. ШЕК 2, 1 бірдей дегенді білдіреді (тек назар аударыңыз, алдымен офсет, содан кейін шектеу).

ЖАҢАРТУ: Кестедегі ақпаратқа өзгертулер енгізу

Бұл сұрау кестедегі ақпаратты өзгерту үшін қолданылады.

Көп жағдайда ол WHERE сөйлемімен бірге пайдаланылады, себебі сіз белгілі бір бағандарды өзгерткіңіз келуі мүмкін. Егер WHERE сөйлемі болмаса, өзгертулер барлық жолдарға әсер етеді.

Сондай-ақ LIMIT параметрін өзгерту қажет жолдар санын шектеу үшін пайдалануға болады.

ЖОЮ: Кестеден ақпаратты жою

UPDATE сияқты, бұл сұрау WHERE арқылы пайдаланылады:

Кестенің мазмұнын жою үшін оны келесідей орындауға болады:

пайдаланушылардан ЖОЮ;

Бірақ қолданған дұрысҚЫСҚАУ

Жоюдан басқа, бұл сұрау мәндерді де қалпына келтіреді AUTO_INCREMENT және жолдарды қайтадан қосқанда, санақ нөлден басталады.ЖОЮ ол болмайды және кері санақ жалғасады.

Төменгі мәндер мен арнайы сөздерді өшіру

Жол мәндері

Кейбір таңбаларды өшіру керек (қашу ) немесе ақаулар болуы мүмкін.

Ол үшін кері қиғаш сызық қолданылады.(\).

Арнайы сөздер

MySQL-де болғандықтан көптеген ерекше сөздер бар (ТАҢДАУ немесе ЖАҢАРТУ ), оларды пайдалану кезінде қателерді болдырмау үшін тырнақшаларды пайдалану керек. Бірақ қарапайым дәйексөздер емес, осылар(`).

Яғни, сізге « деп аталатын баған қосу керек болады.жою ", ол келесідей орындалуы керек:

Қорытынды

Соңына дейін оқығаныңыз үшін рахмет. Бұл мақала сізге пайдалы болды деп үміттенемін. Бұл соңы емес! Жалғасы бар:).

Мен сіздердің назарларыңызға жаңадан бастаушыларға арналған SQL мақаласының тегін аудармасын ұсынамын

Барған сайын көбірек заманауи веб-қосымшалар деректер базасымен өзара әрекеттеседі, әдетте тілді пайдаланады SQL... Бақытымызға орай, бұл тілді үйрену өте оңай. Бұл мақалада біз SQL сұрауларының негіздерін және олардың дерекқормен өзара әрекеттесуін үйренуді бастаймыз. MySQL.

Сізге не керек

SQL (Structured Query Language) – реляциялық деректер қорын басқару жүйелерімен (ДҚБЖ) өзара әрекеттесу үшін жасалған тіл, мысалы. MySQL, Oracle, Sqliteжәне басқалар. Осы мақаладағы SQL сұрауларын орындау үшін сіз орнатқансыз деп ойлаймын MySQL... Мен де қолдануға кеңес беремін phpMyAdminүшін көрнекі көрсету құралы ретінде MySQL.

Келесі қолданбалар орнатуды жеңілдетеді MySQLжәне phpMyAdminкомпьютеріңізге:

  • Windows жүйесіне арналған WAMP
  • Mac жүйесіне арналған MAMP

Пәрмен жолында сұрауларды орындауды бастайық. WAMPоны консольде әлдеқашан қамтиды MySQL... Үшін MAMP, сізге мұны оқу қажет болуы мүмкін.

ДЕРЕКТЕР БАЗЫН ҚҰРУ: Дерекқорды жасау

Ең бірінші өтінішіміз. Біз жұмыс істеу үшін мәліметтер базасын жасаймыз.

Ең алдымен, консольді ашыңыз MySQLжәне кіру. Үшін WAMP, әдепкі бойынша бос құпия сөз пайдаланылады. Үшін MAMPқұпия сөз «root» болуы керек.

Жүйеге кіргеннен кейін осы сұрауды теріп, басыңыз Енгізіңіз:

ДЕРЕКТЕР ҚОРЫН ЖАСАУ my_first_db;

Кодыңыздағы жолдың соңында сияқты сұраудың соңына нүктелі үтір (;) қосылатынын ескеріңіз.

Сондай-ақ, кілт сөздер ДЕРЕКТЕР БАЗЫН ҚҰРУішіндегі барлық кілт сөздер сияқты регистрді сезбейді SQL... Бірақ жақсырақ оқу үшін біз оларды бас әріппен жазамыз.

Ескерту: таңбалар жинағы және сұрыптау

Әдепкі таңбалар жиынын және сұрыптау ретін орнатқыңыз келсе, ұқсас сұрауды пайдаланыңыз:

ДЕРЕКТЕР ҚОРЫН ЖАСАУ my_first_db Әдепкі таңбалар жиыны utf8 COLLATE utf8_general_ci;

Қолдау көрсетілетін таңбалар жиыны мен сұрыптаулар тізімін мына жерден табасыз MySQL.

ДЕРЕКТЕР ҚОРЛАРЫН КӨРСЕТУ: Барлық дерекқорлардың тізімі

Бұл сұрау барлық деректер қорын көрсету үшін қолданылады.

DROP DATABASE: Дерекқорды түсіреді

Бұл сұрау арқылы сіз бар дерекқорды тастай аласыз.

Бұл сұраумен абай болыңыз, себебі ол ешқандай ескертулерді көрсетпейді. Дерекқорыңызда кестелер мен деректер болған кезде, сұрау олардың барлығын бірден жояды.

Техникалық тұрғыдан алғанда, бұл сұраныс емес. Бұл «оператор» және соңында нүктелі үтірді қажет етпейді.

Ол хабарлайды MySQLәдепкі дерекқорды таңдап, онымен сеанс соңына дейін жұмыс істеу керек. Біз қазір кестелерді және қалғандарын осы дерекқорда жасауға дайынбыз.

Мәліметтер қорының кестесі дегеніміз не?

Дерекқордағы кестені кәдімгі кесте немесе құрылымдық деректері бар csv файлы ретінде қарастыруға болады.

Осы мысалдағыдай кестеде жол атаулары мен деректер бағандары бар. SQL сұрауларының көмегімен біз осы кестені жасай аламыз. Сондай-ақ біз деректерді қоса, оқи, өзгерте және жоя аламыз.

CREATE TABLE: Кесте жасау

Осы сұрау арқылы біз мәліметтер базасында кесте құра аламыз. Кешіріңіз, құжаттама MySQLжаңа пайдаланушылар үшін өте қолайлы емес. Бұл сұраудың құрылымы өте күрделі болуы мүмкін, бірақ біз қарапайым сұраудан бастаймыз.

Келесі сұрау екі бағаннан тұратын кестені жасайды.

CREATE TABLE пайдаланушылары (пайдаланушы аты VARCHAR (20), құру_күні DATE);

Сұрауды бірнеше жолға жазып, пайдалана алатынымызды ескеріңіз қойындысышегініс үшін.

Бірінші жол қарапайым. атты кестені жасаймыз пайдаланушылар... Әрі қарай жақшада кестенің бағандары үтірмен бөлінген тізімде көрсетіледі. Әрбір баған атауынан кейін деректер түрі болады, мысалы ВАРЧАРнемесе КҮН.

ВАРЧАР (20)бағанның жол типті екенін және ұзындығы 20 таңбадан аспайтынын білдіреді. КҮН- «ЖЖЖЖ-АА-КК» форматында күндерді сақтауға арналған деректер түрі.

Негізгі кілт

Бұл сұранысты орындамас бұрын бағанды ​​енгізу керек Қолданушының ID, ол БАСТАУЫШ КІЛТ болады. Тым көп егжей-тегжейге бармай-ақ, кестедегі деректердің әрбір жолын танудың жолы ретінде бастапқы кілтті қарастыруға болады.

Сұраныс келесідей болады:

CREATE TABLE пайдаланушылары (user_id INT AUTO_INCREMENT PRIMARY KEY, пайдаланушы аты VARCHAR (20), құру_күні DATE);

INT- 32-биттік бүтін тип (сандық). AUTO_INCREMENTдеректер жолы қосылған сайын жаңа идентификатор нөмірін автоматты түрде жасайды. Бұл қажет емес, бірақ онымен ыңғайлырақ.

Бұл баған бүтін сан болмауы мүмкін, бірақ бұл ең көп таралған деректер түрі. Бастапқы кілт бағаны міндетті емес, бірақ оны дерекқордың өнімділігі мен архитектурасын жақсарту үшін пайдалану ұсынылады.

Сұрауды орындаймыз:

Кестелерді КӨРСЕТУ: Барлық кестелердің тізімі

Сұрау ағымдағы деректер қорындағы барлық кестелердің тізімін алуға мүмкіндік береді.

ТҮСІНДІРУ: Кесте құрылымын көрсету

Бұл сұрауды бұрыннан бар кестенің құрылымын көру үшін пайдаланыңыз.

Нәтижесінде өрістер (бағандар) және олардың қасиеттері көрсетіледі.

DROP TABLE: кестені түсіреді

Сондай-ақ ДЕРЕКТЕР ҚОРЫНЫН ТҮСІРУ, бұл сұрау кестені және оның мазмұнын ешбір ескертусіз жояды.

ALTER TABLE: кестені өзгерту

Мұндай сұрау күрделі болуы мүмкін, себебі ол кестеге бірнеше өзгертулер енгізе алады. Кейбір қарапайым мысалдарды қарастырайық.

Оқуға рақмет SQL, бұл сұрау өздігінен түсінікті.

Жою да оңай. Сұрауды сақтықпен пайдаланыңыз, деректер ескертусіз жойылады.

Өрісті қайта қосамыз электрондық пошта, кейінірек ол әлі де қажет болады:

ALTER TABLE пайдаланушылары пайдаланушы атынан КЕЙІН VARCHAR (100) электрондық поштасын ҚОСУ;

Кейде бағанның сипаттарын өзгерту қажет болуы мүмкін, оны жойып, қайта жасаудың қажеті жоқ.

Бұл сұрау өрістің атын өзгертеді пайдаланушы аты v пайдаланушы_атыжәне оның түрін өзгертеді ВАРЧАР (20)үстінде ВАРЧАР (30)... Мұндай өзгерістер кестедегі деректерге әсер етпейді.

INSERT: кестеге деректерді қосу

Сұрауларды пайдаланып кестеге жазбаларды қосамыз.

Сіз көріп тұрғаныңыздай, ҚҰНДЫЛЫҚТАР ()мәндердің үтірмен бөлінген тізімін қамтиды. Жол мәндері жалғыз тырнақшаға алынған. Мәндер кесте жасалған кезде көрсетілген тәртіпте болуы керек.

Бірінші мән екенін ескеріңіз NULLөрісін атаған бастапқы кілт үшін Қолданушының ID... Барлығы өріс ретінде белгіленгендіктен AUTO_INCREMENTжәне идентификатор автоматты түрде жасалады. Деректердің бірінші жолының идентификаторы 1 болады. Келесі қосылатын жол 2 және т.б.

Альтернативті синтаксис

Мұнда жолдарды кірістіруге арналған тағы бір синтаксис берілген.

Бұл жолы біз кілт сөзді қолдандық ОРНАТУорнына ҚҰНДЫЛЫҚТАР... Бірнеше нәрсені атап өтейік:

  • Бағанды ​​өткізіп жіберуге болады. Мысалы, біз өріске мән бермедік Қолданушының IDөйткені ол ретінде белгіленген AUTO_INCREMENT... Түрі бар өріске мән тағайындамасаңыз ВАРЧАР, содан кейін әдепкі бойынша ол бос жолдың мәнін қабылдайды (егер кестені жасау кезінде басқа әдепкі мән көрсетілмесе).
  • Әрбір бағанға атау бойынша сілтеме жасауға болады. Сондықтан өрістер алдыңғы синтаксистен айырмашылығы кез келген ретпен болуы мүмкін.

Альтернативті синтаксис нөмірі 2

Міне, тағы бір мысал.

Бұрынғыдай, сіз өрістерге аты бойынша сілтеме жасай аласыз, олар кез келген ретпен жүре алады.

Соңғы енгізілген жолдың идентификаторын алу үшін осы сұрауды пайдаланыңыз.

ҚАЗІР ()

Функцияларды қалай пайдалану керектігін көрсететін уақыт келді MySQLсұрауларда.

Функция ҚАЗІР ()ағымдағы күнді қайтарады. Оны түр өрісіне ағымдағы күнді автоматты түрде қосу үшін пайдаланыңыз КҮН.

ескерту алғанымызды ескертеміз MySQLбірақ бұл соншалықты маңызды емес. Себебі, бұл функция ҚАЗІР ()шын мәнінде уақыт туралы ақпаратты қайтарады.

Біз алаң құрдық жасау_күніонда уақыт емес, күн ғана болуы мүмкін, сондықтан деректер қысқартылды. Орнына ҚАЗІР ()пайдалана алар едік CURDATE ()ол тек ағымдағы күнді қайтарады, бірақ соңғы нәтиже бірдей болады.

ТАҢДАУ: кестеден деректерді алу

Жазған деректеріміз оқымайынша түкке тұрғысыз екені анық. Көмекке сұрау келеді ТАҢДАУ.

Сұранысты пайдаланудың ең қарапайым мысалы ТАҢДАУкестеден деректерді оқу үшін:

Жұлдызша (*) кестедегі барлық бағандарды алғымыз келетінін білдіреді. Егер сізге тек белгілі бір бағандарды алу қажет болса, келесідей нәрсені пайдаланыңыз:

Көбінесе біз барлығын емес, белгілі бір жолдарды ғана алғымыз келеді. Мысалы, пайдаланушының электрондық пошта мекенжайын алайық торттар.

Бұл IF жағдайына ұқсас. WHERE сұрауда шарт орнатуға және қажетті нәтижені алуға мүмкіндік береді.

Жалғыз белгі (=) теңдік шарты үшін пайдаланылады, қосарлы (==) емес, бағдарламалауда пайдаланатын шығарсыз.

Басқа шарттарды да қолдануға болады:

ЖӘНЕжәне НЕМЕСЕшарттарды біріктіру үшін қолданылады:

Сандық мәндерді тырнақшаға алудың қажеті жоқ екенін ескеріңіз.

IN ()

Бірнеше мәндермен салыстыру үшін пайдаланылады.

ЛАЙК

Іздеу үлгісін орнатуға мүмкіндік береді.

Үлгіні көрсету үшін пайыз белгісі (%) пайдаланылады.

ORDER BY тармағы

Нәтижені сұрыптауды қаласаңыз, осы шартты пайдаланыңыз:

Әдепкі рет ASC(Өсу). қосу DESCкері ретпен сұрыптау.

ШЕКТЕУ ... ОФСЕТ ...

Қайтарылған жолдар санын шектей аласыз.

ШЕК 2алғашқы екі жолды алады. ШЕК 1 ОФСЕТ 2алғашқы екеуінен кейін бір жолды алады. ШЕК 2, 1бірдей мағынаны білдіреді, тек бірінші сан ығысу болып табылады, ал екіншісі жолдар санын шектейді.

ЖАҢАРТУ: Кестедегі деректерді жаңарту

Бұл сұрау кестедегі деректерді жаңарту үшін пайдаланылады.

Көп жағдайда -мен бірге қолданылады ҚАЙДАарнайы жолдарды жаңарту үшін. Шарт болса ҚАЙДАкөрсетілмеген болса, өзгертулер барлық жолдарға қолданылады.

Өзгермелі жолдарды шектеу үшін пайдалануға болады ШЕК.

DELETE: кестеден деректерді жою

Сондай-ақ , бұл сұрау көбінесе шартпен бірге қолданылады ҚАЙДА.

КЕСТЕНДІ ҚЫСҚАУ

Кестеден мазмұнды жою үшін келесідей сұрауды пайдаланыңыз:

пайдаланушылардан ЖОЮ;

Жақсырақ пайдалану үшін .

Сондай-ақ өріс есептегішін қалпына келтіреді AUTO_INCREMENT, сондықтан жаңадан қосылған жолдар 1-ге тең идентификаторға ие болады. Қолдану кезінде бұл болмайды және есептегіш өсе береді.

Жол мәндері мен арнайы сөздерден қашу

Жол мәндері

Кейбір кейіпкерлерден құтылу керек немесе ақаулар болуы мүмкін.

Кері қиғаш сызық (\) қашу үшін пайдаланылады.

Бұл қауіпсіздік мақсатында өте маңызды. Кез келген пайдаланушы деректері дерекқорға жазылмас бұрын жойылуы керек. В PHP mysql_real_escape_string () функциясын немесе дайындалған мәлімдемелерді пайдаланыңыз.

Арнайы сөздер

бастап MySQLсияқты көптеген сақталған сөздер ТАҢДАУнемесе Шатастыруды болдырмау үшін бағандар мен кесте атауларын тырнақшаға алыңыз. Сонымен қатар, сіз қарапайым тырнақшаларды емес, кері белгілерді (`) пайдалануыңыз керек.

Айталық, қандай да бір себептермен сіз аталған бағанды ​​қосқыңыз келеді :

Қорытынды

Мақаланы оқығаныңыз үшін рахмет. Мен сізге сол тілді көрсете алдым деп үміттенемін SQLөте функционалды және үйренуге оңай.