SQL-ի նկարազարդ ինքնաուսուցման ուղեցույց սկսնակների համար: Կատեգորիաների արխիվներ. Գրքեր SQL-ի վրա Sql ծրագրավորման լեզու կեղծիքների համար

Հեղինակից.Ձեզ թեյնիկ են անվանել։ Դե, սա շտկելի է: Ամեն սամովար ժամանակին թեյնիկ էր։ Թե՞ յուրաքանչյուր պրոֆեսիոնալ ժամանակին սամովար է եղել: Ոչ, նորից ինչ-որ բան այն չէ: Ընդհանուր առմամբ, MySQL-ը սկսնակների համար է:

Ինչու՞ է dummies-ին անհրաժեշտ MySQL

Եթե ​​դուք լրջորեն պատրաստվում եք ձեր կյանքը կապել ինտերնետի հետ, ապա «ոստայնում» հենց առաջին քայլերին դուք կհանդիպեք այս DBMS-ին։ MySQL-ն կարելի է անվտանգ անվանել «ամբողջ ինտերնետ» տվյալների բազայի կառավարման համակարգ: Ոչ մի քիչ թե շատ լուրջ ռեսուրս չի կարող առանց դրա, այն առկա է յուրաքանչյուր հոսթինգի ադմինիստրատորի վահանակում։ Եվ ամենից շատ հայտնի CMS և նույնիսկ ինքնաշեն շարժիչները կառուցվում են նրա մասնակցությամբ:

Ընդհանուր առմամբ, դուք չեք կարող անել առանց այս հարթակի: Բայց այն ուսումնասիրելու համար անհրաժեշտ է նաեւ ճիշտ մոտեցում, ճիշտ գործիքներ, եւ ամենակարեւորը՝ ցանկություն ու համբերություն։ Հուսով եմ, որ դուք շատ ունեք վերջինս: Եվ պատրաստ եղեք այն բանին, որ ձեր ուղեղը կեռա, և գոլորշին ձեր գլխից դուրս կգա, ինչպես իսկական թեյնիկից:

Բայց MySQL-ն այնքան դժվար է կեղծիքների համար միայն այն դեպքում, եթե դուք սկսեք այն սխալ սովորել: Մենք նման սխալ չենք անի, և այս տեխնոլոգիայի հետ մեր ծանոթությունը կսկսենք հենց սկզբից։

Հիմնական հասկացություններ

Նախ, եկեք անցնենք հիմնական հասկացությունների միջով, որոնք մենք կնշենք այս գրառման մեջ.

Տվյալների բազան (DB) DBMS-ի հիմնական բաղկացուցիչ միավորն է: Տվյալների բազան ներառում է աղյուսակներ, որոնք բաղկացած են սյուներից և գրառումներից (տողերից): Խաչմերուկում ձևավորված բջիջները պարունակում են որոշակի տեսակի կառուցվածքային տվյալներ:

DBMS (տվյալների բազայի կառավարման համակարգ) - տվյալների բազայի կառավարման բոլոր ծրագրային մոդուլների մի շարք:

SQL-ը հարցումների կառուցվածքային լեզու է, որի օգնությամբ մշակողը «շփվում» է DBMS-ի միջուկի (սերվերի) հետ։ Ինչպես ցանկացած ծրագրավորման լեզու, SQL-ն ունի իր սեփական շարահյուսությունը, հրամանների և օպերատորների հավաքածուն, աջակցվող տվյալների տեսակները:

Կարծում եմ՝ մենք բավականաչափ տեսական գիտելիքներ ունենք սկսելու համար: Տեսականորեն բաց թողնված բացերը գործնականում «կներկենք»։ Այժմ մնում է միայն ընտրել ճիշտ ծրագրային գործիքը:

Ճիշտ գործիք գտնելը

Բավականին շատ «փնտրելով» սկսնակների համար նախատեսված MySQL պատյանների ամբողջ տեսականին, ես հասկացա, որ դրանք պարզապես գոյություն չունեն: DBMS կառավարման բոլոր ծրագրային արտադրանքները պահանջում են արդեն տեղադրված տվյալների բազայի սերվեր: Ընդհանուր առմամբ, ես ևս մեկ անգամ որոշեցի չհորինել «սկուտերը» և ընտրեցի հայրենական Denwer փաթեթը: Դուք կարող եք ներբեռնել այն պաշտոնական կայքում:

Այն արդեն ներառում է DBMS-ի բոլոր բաղադրիչները, ինչը թույլ է տալիս սկսնակին սկսել գործնական ծանոթություն MySQL-ի հետ պարզ և հասկանալի տեղադրումից անմիջապես հետո: Բացի այդ, Denwer-ը ներառում է մի քանի այլ գործիքներ, որոնք անհրաժեշտ են սկսնակ ծրագրավորողի համար՝ լոկալ սերվեր, PHP:

Առաջին քայլերը

Ես չեմ նկարագրի «ջենթլմենական» հավաքածուի տեղադրման գործընթացը, քանի որ այնտեղ ամեն ինչ ինքնաբերաբար տեղի է ունենում։ Տեղադրումը գործարկելուց հետո ժամանակ ունեք միայն անհրաժեշտ ստեղները սեղմելու համար: Պարզապես այն, ինչ ձեզ հարկավոր է MySQL-ի կեղծ տարբերակում:

Երբ տեղադրման գործընթացը ավարտվի, գործարկեք տեղական սերվերը, սպասեք մի քանի վայրկյան: Դրանից հետո ձեր բրաուզերի հասցեի տողում մուտքագրեք localhost:

«Hurray, it is working!» էջում։ հետևեք նկարի հղումներից մեկին. Այնուհետև դուք կտեղափոխվեք phpMyAdmin՝ տվյալների բազայի կառավարման վահանակ:

Սեղմելով http://downloads.mysql.com/docs/world.sql.zip հղմանը, դուք կներբեռնեք փորձարկման տվյալների բազայի նմուշը MySQL պաշտոնական կայքից: Նորից գնացեք phpMyAdmin, վերևի գլխավոր ընտրացանկում անցեք «Ներմուծում» ներդիրին: Առաջին բաժնում «Ներմուծում ընթացիկ» պատուհանում («Ներմուծվող ֆայլ») սահմանեք «Փնտրեք ձեր համակարգիչը» արժեքը:

Explorer-ի պատուհանում ընտրեք արխիվը ներբեռնված օրինակի տվյալների բազայով: Մի մոռացեք սեղմել «Ok» հիմնական պատուհանի ներքևում:

Խորհուրդ եմ տալիս առայժմ չփոխել նշված պարամետրերի արժեքները: Սա կարող է հանգեցնել ներմուծված աղբյուրի տվյալների սխալ ցուցադրմանը: Եթե ​​phpMyAdmin-ը սխալ է տալիս, որ չի կարող ճանաչել տվյալների բազայի սեղմման ալգորիթմը, ապա ապափաթափեք այն և սկզբից կրկնեք ներմուծման ողջ գործընթացը։

Եթե ​​ամեն ինչ լավ է անցել, ապա ծրագրի հաղորդագրությունը կհայտնվի վերևում, որ ներմուծումը հաջող է եղել, իսկ ձախ մասում DB ցուցակում կա ևս մեկ բառ (բառ):

Եկեք նայենք դրա կառուցվածքին ներսից, որպեսզի ավելի պարզ պատկերացնեք, թե ինչի հետ գործ կունենաք։

Կտտացրեք սկսնակների համար 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-ը, կարելի է միայն գործնականում տիրապետել՝ ինքներդ զգալով այն և հասկանալով, թե ինչ է տեղի ունենում այս կամ այն ​​կառուցումը կատարելիս:

Այս ձեռնարկը հիմնված է Քայլ առ քայլ սկզբունքի վրա, այսինքն. անհրաժեշտ է կարդալ այն հաջորդաբար և ցանկալի է անմիջապես օրինակներին հետևելով: Բայց եթե ճանապարհին դուք կարիք ունեք ավելի մանրամասն հրահանգների մասին ավելին իմանալու, ապա օգտագործեք հատուկ որոնում ինտերնետում, օրինակ, MSDN գրադարանում:

Այս ձեռնարկը գրելիս օգտագործվել է MS SQL Server տվյալների բազայի 2014 տարբերակը, սկրիպտները գործարկելու համար ես օգտագործել եմ MS SQL Server Management Studio (SSMS):

Համառոտ MS SQL Server Management Studio (SSMS) մասին

SQL Server Management Studio-ն (SSMS) Microsoft SQL Server-ի համար նախատեսված գործիք է՝ տվյալների բազայի բաղադրիչները կազմաձևելու, կառավարելու և կառավարելու համար: Այս օգտակար ծրագիրը պարունակում է սցենարի խմբագրիչ (որը մենք հիմնականում կօգտագործենք) և գրաֆիկական ծրագիր, որն աշխատում է սերվերի օբյեկտների և պարամետրերի հետ: SQL Server Management Studio-ի հիմնական գործիքը Object Explorer-ն է, որը թույլ է տալիս օգտվողին դիտել, առբերել և շահարկել սերվերի օբյեկտները: Այս տեքստը մասամբ փոխառված է Վիքիպեդիայից։

Նոր սցենարի խմբագրիչ ստեղծելու համար օգտագործեք Նոր հարցում կոճակը.

Ներկայիս տվյալների բազան փոխելու համար կարող եք օգտագործել բացվող ցանկը.

Հատուկ հրաման (կամ հրամանների խումբ) կատարելու համար ընտրեք այն և սեղմեք Կատարել կոճակը կամ F5 ստեղնը: Եթե ​​այս պահին խմբագրում կա միայն մեկ հրաման, կամ դուք պետք է կատարեք բոլոր հրամանները, ապա ձեզ հարկավոր չէ որևէ բան ընտրել:

Սկրիպտները, հատկապես նրանք, որոնք ստեղծում են օբյեկտներ (աղյուսակներ, սյունակներ, ինդեքսներ), կատարելուց հետո փոփոխությունները տեսնելու համար օգտագործեք թարմացումը համատեքստի ընտրացանկից՝ ընտրելով համապատասխան խումբը (օրինակ՝ Աղյուսակներ), հենց աղյուսակը կամ դրանում գտնվող Սյունակներ խումբը:

Իրականում, սա այն ամենն է, ինչ մենք պետք է իմանանք այստեղ բերված օրինակները գործադրելու համար: Մնացած SSMS կոմունալը հեշտ է ինքնուրույն սովորել:

Մի քիչ տեսություն

Հարաբերական տվյալների բազան (RDB, կամ ավելին, պարզապես տվյալների բազայի համատեքստում) աղյուսակների հավաքածու է, որոնք փոխկապակցված են: Կոպիտ ասած՝ տվյալների բազան ֆայլ է, որտեղ տվյալները պահվում են կառուցվածքային ձևով։

DBMS - Կառավարման համակարգ այս տվյալների բազաների համար, այսինքն. դա տվյալների բազայի որոշակի տեսակի հետ աշխատելու գործիքների հավաքածու է (MS SQL, Oracle, MySQL, Firebird, ...):

Նշում
Որովհետեւ կյանքում, խոսակցական խոսքում մենք հիմնականում ասում ենք. «Oracle DB», կամ նույնիսկ պարզապես «Oracle», իրականում նշանակում է «Oracle DBMS», ապա այս ձեռնարկի համատեքստում երբեմն կօգտագործվի DB տերմինը: Համատեքստից, կարծում եմ, պարզ կլինի, թե ինչի մասին է խոսքը։

Աղյուսակը սյունակների հավաքածու է: Սյունակները կարող են նաև կոչվել դաշտեր կամ սյունակներ, այս բոլոր բառերը կօգտագործվեն հոմանիշ՝ նույն բանն արտահայտելու համար:

Աղյուսակը RDB-ի հիմնական օբյեկտն է, բոլոր RDB տվյալները պահվում են տող առ տող աղյուսակի սյունակներում: Հոմանիշներ են նաև լարերը, ձայնագրությունները։

Յուրաքանչյուր աղյուսակի, ինչպես նաև դրա սյունակների համար տրված են անուններ, որոնց միջոցով դրանք հետագայում հասանելի են դառնում:
Օբյեկտի անունը (աղյուսակի անվանումը, սյունակի անվանումը, ինդեքսի անվանումը և այլն) MS SQL-ում կարող է ունենալ առավելագույնը 128 նիշ:

Հղման համար- ORACLE տվյալների բազայում օբյեկտների անունները կարող են ունենալ առավելագույնը 30 նիշ: Հետևաբար, կոնկրետ տվյալների բազայի համար դուք պետք է մշակեք օբյեկտների անվանման ձեր սեփական կանոնները, որպեսզի պահպանեք նիշերի քանակի սահմանափակումը:

SQL-ը լեզու է, որը թույլ է տալիս հարցումներ կատարել տվյալների բազայում՝ օգտագործելով DBMS: Հատուկ DBMS-ում SQL լեզուն կարող է ունենալ կոնկրետ իրականացում (իր սեփական բարբառը):

DDL-ը և DML-ը SQL լեզվի ենթաբազմություն են.

  • DDL լեզուն օգտագործվում է տվյալների բազայի կառուցվածքը ստեղծելու և փոփոխելու համար, այսինքն. աղյուսակներ և հղումներ ստեղծելու / փոփոխելու / ջնջելու համար:
  • DML լեզուն թույլ է տալիս կառավարել աղյուսակի տվյալները, այսինքն. իր տողերով։ Այն թույլ է տալիս ընտրել տվյալներ աղյուսակներից, ավելացնել նոր տվյալներ աղյուսակներում և թարմացնել և ջնջել առկա տվյալները:

Կան մեկնաբանությունների 2 տեսակ, որոնք կարող են օգտագործվել SQL-ում (մեկ տող և բազմակողմ).

Մեկ տողով մեկնաբանություն
և

/ * բազմատող մեկնաբանություն * /

Իրականում սա բավական կլինի տեսության համար։

DDL - Տվյալների սահմանման լեզու

Օրինակ, հաշվի առեք աշխատողների մասին տվյալների աղյուսակը, սովորական ձևով այն անձի համար, ով ծրագրավորող չէ.

Այս դեպքում աղյուսակի սյունակներն ունեն հետևյալ անվանումները՝ Անձնակազմի համարը, լրիվ անվանումը, Ծննդյան տարեթիվը, Էլ. փոստը, Պաշտոնը, բաժինը:

Այս սյունակներից յուրաքանչյուրը կարող է բնութագրվել իր պարունակած տվյալների տեսակով.

  • Անձնակազմի համարը` ամբողջ թիվ
  • Ամբողջական անուն - տող
  • Ծննդյան ամսաթիվ - ամսաթիվ
  • Էլ. փոստ - տող
  • Պաշտոն - լար
  • Բաժանմունք - լար
Սյունակի տեսակը բնութագիր է, որը ցույց է տալիս, թե տվյալ սյունակը ինչ տեսակի տվյալներ կարող է պահել:

Սկսելու համար բավական կլինի հիշել միայն հետևյալ հիմնական տվյալների տեսակները, որոնք օգտագործվում են MS SQL-ում.

Իմաստը MS SQL նշում Նկարագրություն
Փոփոխական երկարությամբ տող վարչար (N)
և
նվարճար (N)
N թվով մենք կարող ենք նշել համապատասխան սյունակի համար տողի հնարավոր առավելագույն երկարությունը: Օրինակ, եթե ուզում ենք ասել, որ «անուն» սյունակի արժեքը կարող է պարունակել առավելագույնը 30 նիշ, ապա պետք է այն դնենք nvarchar (30) տեսակի վրա։
Varchar-ի և nvarchar-ի միջև տարբերությունն այն է, որ varchar-ը պահպանում է տողերը ASCII ձևաչափով, որտեղ մեկ նիշը 1 բայթ է, մինչդեռ nvarchar-ը տողերը պահում է Unicode ձևաչափով, որտեղ յուրաքանչյուր նիշը 2 բայթ է:
Varchar տեսակը պետք է օգտագործվի միայն այն դեպքում, եթե դուք 100% վստահ եք, որ դաշտը Unicode նիշերը պահելու կարիք չունի: Օրինակ, varchar-ը կարող է օգտագործվել էլփոստի հասցեները պահելու համար, քանի որ դրանք սովորաբար պարունակում են միայն ASCII նիշեր:
Ֆիքսված երկարությամբ պարան նիշ (N)
և
nchar (N)
Այս տեսակը տարբերվում է փոփոխական երկարությամբ տողից նրանով, որ եթե տողը N նիշից պակաս է, ապա այն միշտ լրացվում է դեպի աջ դեպի N-ի երկարությունը բացատներով և պահվում է տվյալների բազայում այս ձևով, այսինքն. այն զբաղեցնում է տվյալների բազայում ճշգրիտ N նիշ (որտեղ մեկ նիշը զբաղեցնում է 1 բայթ char և 2 բայթ nchar-ի համար): Իմ պրակտիկայում այս տեսակը շատ հազվադեպ է օգտագործվում, և եթե այն օգտագործվում է, ապա այն օգտագործվում է հիմնականում char (1) ձևաչափով, այսինքն. երբ դաշտը սահմանվում է մեկ նիշով:
Ամբողջ թիվ միջ Այս տեսակը թույլ է տալիս սյունակում օգտագործել միայն ամբողջ թվեր՝ և՛ դրական, և՛ բացասական: Հղման համար (այժմ սա մեզ համար այնքան էլ տեղին չէ) - թվերի միջակայքը, որը թույլ է տալիս int տեսակը, տատանվում է -2 147 483 648-ից մինչև 2 147 483 647: Սովորաբար սա հիմնական տեսակն է, որն օգտագործվում է նույնացուցիչներ սահմանելու համար:
Իրական կամ իրական թիվ լողալ Պարզ ասած, սրանք թվեր են, որոնցում կարող է լինել տասնորդական կետ (ստորակետ):
ամսաթիվը ամսաթիվը Եթե ​​Ձեզ անհրաժեշտ է պահել միայն Ամսաթիվը սյունակում, որը բաղկացած է երեք բաղադրիչներից՝ Թիվ, Ամիս և Տարի: Օրինակ՝ 15.02.2014թ. (2014թ. փետրվարի 15): Այս տեսակը կարող է օգտագործվել «Ընդունման ամսաթիվ», «Ծննդյան ամսաթիվ» և այլն սյունակի համար: այն դեպքերում, երբ մեզ համար կարևոր է ամրագրել միայն ամսաթիվը, կամ երբ ժամանակի բաղադրիչը մեզ համար կարևոր չէ և կարող է հրաժարվել, կամ եթե այն հայտնի չէ:
Ժամանակը ժամանակ Այս տեսակը կարող է օգտագործվել, եթե միայն ժամանակի տվյալները պետք է պահվեն սյունակում, այսինքն. Ժամեր, րոպեներ, վայրկյաններ և միլիվայրկյաններ: Օրինակ, 17:38: 31.3231603
Օրինակ՝ ամենօրյա «Թռիչքի մեկնման ժամը»։
ամսաթիվը և ժամը ամսաթիվը Այս տեսակը թույլ է տալիս միաժամանակ պահպանել և՛ ամսաթիվը, և՛ ժամը: Օրինակ, 15.02.2014 17:38: 31.323
Օրինակ, սա կարող է լինել իրադարձության ամսաթիվը և ժամը:
Դրոշ քիչ Այս տեսակը հարմար է այնպիսի արժեքներ պահելու համար, ինչպիսիք են «Այո» / «Ոչ», որտեղ «Այո»-ն կպահվի որպես 1, իսկ «Ոչ»-ը կպահվի որպես 0:

Նաև դաշտի արժեքը, եթե այն արգելված չէ, կարող է չնշվել, այդ նպատակով օգտագործվում է NULL բանալի բառը։

Օրինակները գործարկելու համար եկեք ստեղծենք թեստային բազա, որը կոչվում է Test:

Պարզ տվյալների բազա (առանց լրացուցիչ պարամետրերի նշելու) կարող է ստեղծվել հետևյալ հրամանի միջոցով.

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ Թեստ
Դուք կարող եք ջնջել տվյալների բազան հրամանով (այս հրամանով պետք է շատ զգույշ լինեք).

ԿԱՌՆԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ Թեստ
Մեր տվյալների բազան անցնելու համար կարող եք գործարկել հրամանը.

ՕԳՏԱԳՈՐԾԵԼ Թեստ
Որպես այլընտրանք, SSMS ընտրացանկի տարածքում բացվող ցանկից ընտրեք Test տվյալների բազան: Աշխատելիս ես հաճախ օգտագործում եմ հիմքերի միջև անցման այս մեթոդը:

Այժմ մեր տվյալների բազայում մենք կարող ենք աղյուսակ ստեղծել՝ օգտագործելով նկարագրությունները, ինչպես որ կան՝ օգտագործելով բացատներ և կիրիլիցա նիշեր.

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿ [Աշխատակիցներ] ([Անձնակազմի համարը] int, [Լրիվ անուն] nvarchar (30), [Ծննդյան ամսաթիվ] ամսաթիվ, nvarchar (30), [Position] nvarchar (30), [Department] nvarchar (30))
Այս դեպքում մենք պետք է անունները փակցնենք քառակուսի փակագծերում [...]:

Բայց տվյալների բազայում ավելի մեծ հարմարության համար ավելի լավ է նշել օբյեկտների բոլոր անունները լատինական այբուբենով և անունների մեջ բացատներ չօգտագործել: MS SQL-ում սովորաբար այս դեպքում յուրաքանչյուր բառ սկսվում է մեծատառով, օրինակ՝ «Personnel number» դաշտի համար կարող ենք անունը դնել PersonnelNumber: Անվան մեջ կարող եք նաև թվեր օգտագործել, օրինակ՝ PhoneNumber1:

Մի նոտայի վրա
Որոշ DBMS-ներում «PHONE_NUMBER» անվանման հետևյալ ձևաչափը կարող է ավելի նախընտրելի լինել, օրինակ՝ այս ձևաչափը հաճախ օգտագործվում է ORACLE DB-ում: Բնականաբար, դաշտի անվանումը նշելիս ցանկալի է, որ այն չհամընկնի DBMS-ում օգտագործվող հիմնաբառերի հետ։

Այդ պատճառով կարող եք մոռանալ քառակուսի փակագծերի շարահյուսության մասին և ջնջել [Աշխատակիցներ] աղյուսակը.

DOP TABLE [Աշխատակիցներ]
Օրինակ՝ աշխատողների հետ աղյուսակը կարելի է անվանել «Աշխատակիցներ», իսկ դրա դաշտերը կարող են անվանվել հետևյալ կերպ.

  • ID - Անձնակազմի համարը (Աշխատողի ID)
  • Անուն - լրիվ անվանումը
  • Ծննդյան օր - Ծննդյան ամսաթիվ
  • փոստ - Էլ
  • Պաշտոն – Պաշտոն
  • Բաժին – Բաժին
Շատ հաճախ ID բառն օգտագործվում է նույնացուցիչի դաշտը անվանելու համար:

Հիմա եկեք ստեղծենք մեր աղյուսակը.

ՍԵՂԱՆԱԿԻ ՍՏԵՂԾԵՔ Աշխատակիցներ (ID int, Անունը nvarchar (30), Ծննդյան ամսաթիվ, Էլ.
Պահանջվող սյունակները նշելու համար կարող եք օգտագործել NOT NULL տարբերակը:

Գոյություն ունեցող աղյուսակի համար դաշտերը կարող են վերասահմանվել՝ օգտագործելով հետևյալ հրամանները.

ID դաշտի թարմացում ALTER TABLE Employees ALTER COLUMN ID int NOT NULL - թարմացում Անվան դաշտը ALTER TABLE Employees ALTER COLUMN Name nvarchar (30) NOT NULL

Մի նոտայի վրա
SQL լեզվի ընդհանուր հայեցակարգը DBMS-ների մեծ մասի համար մնում է նույնը (համենայն դեպս, ես կարող եմ դա դատել DBMS-ներով, որոնց հետ ես աշխատել եմ): Տարբեր DBMS-ներում DDL-ի միջև տարբերությունը հիմնականում կայանում է տվյալների տեսակների մեջ (այստեղ ոչ միայն դրանց անունները կարող են տարբերվել, այլ նաև դրանց իրականացման մանրամասները), SQL լեզվի իրականացման առանձնահատկությունները կարող են նաև փոքր-ինչ տարբերվել (այսինքն, էությունը. հրամանները նույնն են, բայց բարբառում կարող են փոքր տարբերություններ լինել, ավաղ, բայց մեկ ստանդարտ չկա): Իմանալով SQL-ի հիմունքները՝ դուք հեշտությամբ կարող եք անցնել մեկ DBMS-ից մյուսին, քանի որ այս դեպքում անհրաժեշտ է միայն հասկանալ նոր DBMS-ում հրամանների իրականացման մանրամասները, այսինքն. շատ դեպքերում բավական է պարզ անալոգիան:

Աղյուսակի ստեղծում CREATE TABLE Employees (ID int, - ORACLE-ում, int տեսակը համարժեք է (38 համարի փաթաթան) Անունը nvarchar2 (30), - nvarchar2 ORACLE-ում համարժեք է nvarchar-ին MS SQL-ում Ծննդյան ամսաթիվ, էլ. փոստ nvarchar23 ) , Պաշտոն nvarchar2 (30), Department nvarchar2 (30)); - ID և Անվան դաշտերի թարմացում (այստեղ ՓՈՓՈԽԵԼ (…) օգտագործվում է ALTER COLUMN-ի փոխարեն) ALTER TABLE Employees MODIFY (ID int NOT NULL, Name nvarchar2 (30) NOT NULL); - ավելացնելով PK (այս դեպքում կառուցվածքը կարծես MS SQL-ում, այն կցուցադրվի ստորև) ՓՈԽՈՂԵԼ ԱՂՅՈՒՍԱԿԸ Աշխատակիցներ ADD CONSTRAINT PK_Employees PRIMARY KEY (ID);
ORACLE-ի համար կան տարբերություններ varchar2 տիպի իրականացման առումով, դրա կոդավորումը կախված է տվյալների բազայի կարգավորումներից և տեքստը կարող է պահպանվել, օրինակ, UTF-8 կոդավորման մեջ։ Բացի այդ, ORACLE-ում դաշտի երկարությունը կարող է սահմանվել ինչպես բայթերով, այնպես էլ նիշերով, դրա համար օգտագործվում են BYTE և CHAR լրացուցիչ տարբերակներ, որոնք նշված են դաշտի երկարությունից հետո, օրինակ.

NAME varchar2 (30 BYTE) - դաշտի ծավալը կլինի 30 բայթ NAME varchar2 (30 CHAR) - դաշտի ծավալը կլինի 30 նիշ
Որ տարբերակը կօգտագործվի լռելյայնորեն BYTE կամ CHAR, ORACLE-ում varchar2 (30) տեսակի պարզ ցուցման դեպքում կախված է տվյալների բազայի կարգավորումներից, այն կարող է նաև երբեմն սահմանվել IDE կարգավորումներում: Ընդհանրապես, երբեմն հեշտությամբ կարող ես շփոթվել, ուստի ORACLE-ի դեպքում, եթե օգտագործվում է varchar2 տեսակը (և դա երբեմն արդարացված է այստեղ, օրինակ, UTF-8 կոդավորումն օգտագործելիս), ես նախընտրում եմ հստակ գրել CHAR ( քանի որ սովորաբար ավելի հարմար է տողի երկարությունը նիշերով կարդալը):

Բայց այս դեպքում, եթե աղյուսակն արդեն պարունակում է որոշակի տվյալներ, ապա հրամանների հաջող կատարման համար անհրաժեշտ է, որ աղյուսակի բոլոր տողերում պետք է լրացվեն ID և Name դաշտերը։ Եկեք դա ցույց տանք օրինակով, մուտքագրեք տվյալները աղյուսակի մեջ ID, Պաշտոն և բաժին դաշտերում, դա կարելի է անել հետևյալ սցենարով.

INSERT Employees (ID, Position, Department) VALUES (1000, N «Տնօրեն», N «Administration»), (1001, N «Ծրագրավորող», N «IT»), (1002, N «Հաշվապահ», N «Հաշվապահություն» ), (1003, N «Ավագ ծրագրավորող», N «ՏՏ»)
Այս դեպքում INSERT հրամանը նույնպես սխալ կառաջացնի, քանի որ Տեղադրելիս մենք չենք նշել անհրաժեշտ Անուն դաշտի արժեքը:
Եթե ​​մենք արդեն ունենայինք այս տվյալները սկզբնական աղյուսակում, ապա «ALTER TABLE Employees ALTER COLUMN ID int NOT NULL» հրամանը հաջողությամբ կավարտվի, իսկ «ALTER TABLE Employees ALTER COLUMN Name int NOT NULL» հրամանը կստեղծեր սխալի հաղորդագրություն: , որ Անուն դաշտում կան NULL (չճշտված) արժեքներ։

Անուն դաշտի համար արժեքներ ավելացրեք և նորից լրացրեք տվյալները.


Նաև NOT NULL տարբերակը կարող է ուղղակիորեն օգտագործվել նոր աղյուսակ ստեղծելիս, այսինքն. CREATE TABLE հրամանի համատեքստում:

Նախ, եկեք ջնջենք աղյուսակը՝ օգտագործելով հրամանը.

DOP TABLE Աշխատակիցներ
Այժմ եկեք ստեղծենք աղյուսակ պարտադիր սյունակներով ID և Name:

ՍԵՂԱՆԱԿԻ ՍՏԵՂԾԵՔ Աշխատակիցներ (ID int NOT NULL, Անունը nvarchar (30) NOT NULL, Ծննդյան ամսաթիվ, Էլ.
Կարող եք նաև գրել NULL սյունակի անունից հետո, ինչը կնշանակի, որ դրանում թույլատրվելու են NULL արժեքներ (նշված չէ), բայց դա անհրաժեշտ չէ, քանի որ այս հատկանիշը ենթադրվում է լռելյայն:

Եթե, ընդհակառակը, պահանջվում է լրացման համար առկա սյունակը դարձնել ընտրովի, ապա մենք օգտագործում ենք հետևյալ հրամանի շարահյուսությունը.

ALTER TABLE Employees ALTER COLUMN Անունը nvarchar (30) NULL
Կամ պարզապես.

ALTER TABLE Employees ALTER COLUMN Անունը nvarchar (30)
Բացի այդ, այս հրամանով մենք կարող ենք փոխել դաշտի տեսակը մեկ այլ համատեղելի տեսակի կամ փոխել դրա երկարությունը: Օրինակ, եկեք ընդլայնենք Անուն դաշտը մինչև 50 նիշ.

ALTER TABLE Employees ALTER COLUMN Անունը nvarchar (50)

Առաջնային բանալին

Աղյուսակ ստեղծելիս ցանկալի է, որ այն ունենա եզակի սյունակ կամ սյունակների մի շարք, որը եզակի է իր յուրաքանչյուր տողի համար. գրառումը կարող է եզակիորեն նույնականացվել այս եզակի արժեքով: Այս արժեքը կոչվում է աղյուսակի հիմնական բանալին: Մեր Աշխատակիցների աղյուսակի համար նման եզակի արժեք կարող է լինել ID սյունակը (որը պարունակում է «Աշխատակիցների անձնակազմի համարը», նույնիսկ եթե մեր դեպքում այս արժեքը եզակի է յուրաքանչյուր աշխատակցի համար և չի կարող կրկնվել):

Դուք կարող եք ստեղծել հիմնական բանալի գոյություն ունեցող աղյուսակում՝ օգտագործելով հրամանը.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցներ ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ PK_Employees PRIMARY KEY (ID)
Այնտեղ, որտեղ «PK_Employees»-ը հիմնական բանալու համար պատասխանատու սահմանափակման անվանումն է: Որպես կանոն, «PK_» նախածանցը օգտագործվում է հիմնական բանալին անվանելու համար, որին հաջորդում է աղյուսակի անունը:

Եթե ​​առաջնային բանալին բաղկացած է մի քանի դաշտից, ապա այդ դաշտերը պետք է նշված լինեն փակագծերում՝ բաժանված ստորակետերով.

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԻ աղյուսակի_անունը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿԻՉ սահմանափակման_անուն ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ (դաշտ1, դաշտ2, ...)
Հարկ է նշել, որ MS SQL-ում բոլոր դաշտերը, որոնք ներառված են հիմնական բանալիում, պետք է NOT NULL լինեն:

Բացի այդ, առաջնային բանալին կարող է ուղղակիորեն որոշվել աղյուսակը ստեղծելիս, այսինքն. CREATE TABLE հրամանի համատեքստում: Ջնջենք աղյուսակը.

DOP TABLE Աշխատակիցներ
Եվ հետո եկեք ստեղծենք այն՝ օգտագործելով հետևյալ շարահյուսությունը.

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿԻ աշխատակիցներ (ID int NOT NULL, Անունը nvarchar (30) NOT NULL, Ծննդյան ամսաթիվ, էլ. դաշտերը որպես սահմանափակում)
Ստեղծվելուց հետո տվյալները լրացրեք աղյուսակում.

INSERT Employees (ID, Position, Department, Name) VALUES (1000, N «Տնօրեն», N «Administration», N «Ivanov I.I.», (1001, N «Ծրագրող», N «IT», N « Petrov PP « ), (1002, N" Հաշվապահ ", N" Հաշվապահություն ", N" Սիդորով Ս.Ս. "), (1003, N" Ավագ ծրագրավորող ", N" IT ", N" Andreev A. A.")
Եթե ​​աղյուսակի հիմնական բանալին բաղկացած է միայն մեկ սյունակի արժեքներից, ապա կարող է օգտագործվել հետևյալ շարահյուսությունը.

ՍՏԵՂԾԵՔ ԱՂՅՈՒՍԱԿ Աշխատակիցներ (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - նշեք որպես դաշտի բնութագրիչ Անուն nvarchar (30) NOT NULL, Ծննդյան ամսաթիվ, Էլ.
Փաստորեն, սահմանափակումի անվանումը կարող է բաց թողնել, որի դեպքում նրան տրվելու է համակարգի անուն (ինչպես «PK__Employee__3214EC278DA42077»):

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿԻ աշխատակիցներ (ID int NOT NULL, Անունը nvarchar (30) NOT NULL, Ծննդյան ամսաթիվ, Էլ.
Կամ:

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿԻ Աշխատակիցներ (ID int NOT NULL ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻ, Անունը nvarchar (30) NOT NULL, Ծննդյան ամսաթիվ, Էլ.
Բայց ես խորհուրդ կտայի միշտ հստակորեն նշել սահմանափակման անվանումը մշտական ​​աղյուսակների համար, քանի որ Հստակորեն տրված և հասկանալի անունով, հետագայում ավելի հեշտ կլինի շահարկել այն, օրինակ, կարող եք ջնջել այն.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԸ Աշխատակիցները ՀԱՆՁՆՈՒՄ ԵՆ ՍԱՀՄԱՆԱՓԱԿՈՒՄԸ PK_Employees
Բայց նման կարճ շարահյուսությունը, առանց սահմանափակումների անունները նշելու, հարմար է օգտագործել տվյալների բազայի ժամանակավոր աղյուսակներ ստեղծելիս (ժամանակավոր աղյուսակի անվանումը սկսվում է # կամ ##-ով), որոնք օգտագործելուց հետո կջնջվեն։

Եկեք ամփոփենք

Մինչ այժմ մենք լուսաբանել ենք հետևյալ հրամանները.
  • ՍԵՂԱՆԱԿ ՍՏԵՂԾԵԼ table_name (դաշտերի և դրանց տեսակների թվարկում, սահմանափակումներ) - օգտագործվում է ընթացիկ տվյալների բազայում նոր աղյուսակ ստեղծելու համար;
  • ԸՆԹԱՑԵԼ ՍԵՂԱՆ table_name - ծառայում է ընթացիկ տվյալների բազայից աղյուսակը ջնջելու համար;
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ՓՈՓՈԽԱԿԱՆ ՍՅՈՒՆ column_name… - օգտագործվում է սյունակի տեսակը թարմացնելու կամ դրա կարգավորումները փոխելու համար (օրինակ՝ NULL կամ NOT NULL հատկանիշը նշելու համար);
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄսահմանափակում_անուն ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ(դաշտ1, դաշտ2, ...) - գոյություն ունեցող աղյուսակում առաջնային բանալի ավելացնելով;
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԿԱԹԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ constraint_name - վերացնում է սահմանափակումը աղյուսակից:

Մի քիչ ժամանակավոր սեղանների մասին

Հատված MSDN-ից. MS SQL Server-ում կան երկու տեսակի ժամանակավոր աղյուսակներ՝ տեղական (#) և գլոբալ (##): Տեղական ժամանակավոր աղյուսակները տեսանելի են միայն իրենց ստեղծողների համար, մինչև SQL Server օրինակի հետ կապը ավարտվի, հենց որ դրանք ստեղծվեն: Տեղական ժամանակավոր աղյուսակները ավտոմատ կերպով հեռացվում են այն բանից հետո, երբ օգտատերը անջատվում է SQL Server-ի օրինակից: Համաշխարհային ժամանակավոր աղյուսակները տեսանելի են բոլոր օգտատերերին այս աղյուսակների ստեղծումից հետո կապակցման ցանկացած աշխատաշրջանի ընթացքում և հեռացվում են, երբ այս աղյուսակներին հղում կատարող բոլոր օգտվողներն անջատվում են SQL Server-ի օրինակից:

Tempdb համակարգի տվյալների բազայում ստեղծվում են ժամանակավոր աղյուսակներ, այսինքն. ստեղծելով դրանք՝ մենք չենք աղտոտում հիմնական հիմքը, հակառակ դեպքում ժամանակավոր աղյուսակները լիովին նույնական են սովորական աղյուսակների հետ, դրանք կարող են գցվել նաև DROP TABLE հրամանի միջոցով: Ավելի հաճախ օգտագործվում են տեղական (#) ժամանակավոր աղյուսակներ:

Ժամանակավոր աղյուսակ ստեղծելու համար կարող եք օգտագործել CREATE TABLE հրամանը.

ՍՏԵՂԾԵՔ ՍԵՂԱՆԱԿ #Temp (ID int, Անունը nvarchar (30))
Քանի որ MS SQL-ում ժամանակավոր աղյուսակը նման է սովորական աղյուսակին, կարող եք նաև ինքներդ թողնել այն DROP TABLE հրամանով.

DOP TABLE #Temp

Նաև ժամանակավոր աղյուսակը (ինչպես ինքնին սովորական աղյուսակը) կարող է ստեղծվել և անմիջապես լրացվել հարցման միջոցով վերադարձված տվյալներով՝ օգտագործելով SELECT ... INTO շարահյուսությունը:

SELECT ID, Name INTO #Temp FROM Employees-ից

Մի նոտայի վրա
Ժամանակավոր աղյուսակների իրականացումը կարող է տարբերվել տարբեր DBMS-ներում: Օրինակ, ORACLE-ում և Firebird DBMS-ում ժամանակավոր աղյուսակների կառուցվածքը պետք է նախօրոք սահմանվի CREATE GLOBAL TEMPORARY TABLE հրամանով, որը ցույց է տալիս տվյալների պահպանման առանձնահատկությունները, այնուհետև օգտագործողը կարող է տեսնել այն հիմնական աղյուսակների շարքում և աշխատել դրա հետ որպես: սովորական սեղանով։

Տվյալների բազայի նորմալացում - ենթաաղյուսակների բաժանում (տեղեկատու գրքեր) և հարաբերությունների սահմանում

Մեր ներկայիս Աշխատակիցների աղյուսակն ունի այն թերությունը, որ Պաշտոն և Բաժին դաշտերում օգտատերը կարող է մուտքագրել ցանկացած տեքստ, որը հիմնականում հղի է սխալներով, քանի որ մեկ աշխատող կարող է պարզապես նշել «ՏՏ»-ը որպես բաժին, իսկ երկրորդը, օրինակ, մուտքագրեք «ՏՏ բաժին», երրորդում՝ «ՏՏ»: Արդյունքում անհասկանալի կլինի, թե ինչ նկատի ուներ օգտատերը, այսինքն. Արդյո՞ք այս աշխատակիցները նույն բաժնի աշխատակիցներ են, թե՞ օգտատերը նկարագրված է իրեն, և դրանք 3 տարբեր բաժիններ են։ Ավելին, այս դեպքում մենք չենք կարողանա ճիշտ խմբավորել տվյալները ինչ-որ հաշվետվության համար, որտեղ կարող է պահանջվել ցույց տալ աշխատողների թիվը յուրաքանչյուր բաժնի համատեքստում:

Երկրորդ թերությունը այս տեղեկատվության պահպանման ծավալն է և դրա կրկնօրինակումը, այսինքն. յուրաքանչյուր աշխատակցի համար նշվում է բաժնի լրիվ անվանումը, որը տվյալների բազայում տարածք է պահանջում՝ բաժնի անունից յուրաքանչյուր նիշ պահելու համար:

Երրորդ թերությունը այս դաշտերի թարմացման բարդությունն է, եթե պաշտոնի վերնագիրը փոխվի, օրինակ, եթե դուք պետք է վերանվանեք «Ծրագրավորող» պաշտոնը «Պատանի ծրագրավորող»: Այս դեպքում մենք ստիպված կլինենք փոփոխություններ կատարել աղյուսակի յուրաքանչյուր տողում, որում Դիրքը հավասար է «Ծրագրավորողի»:

Այս թերություններից խուսափելու համար կիրառվում է տվյալների բազայի, այսպես կոչված, նորմալացում՝ այն բաժանելով ենթաաղյուսակների, հղումային աղյուսակների։ Պետք չէ մտնել տեսության ջունգլիներ և ուսումնասիրել, թե ինչ են նորմալ ձևերը, բավական է հասկանալ նորմալացման էությունը։

Ստեղծենք 2 աղյուսակ «Պաշտոններ» և «Բաժանմունքներ», առաջինը կկոչվի Պաշտոններ, իսկ երկրորդը՝ համապատասխանաբար, բաժիններ.

CREATE TABLE Positions (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar (30) NOT NULL) ՍՏԵՂԾԵԼ ԱՂՅՈՒՍԱՅԻ բաժիններ (ID int IDENTITY (1,1) NOT NULL CONSTRAINT Name ) ՈՉ ԱՆՎԱՐ)
Նշենք, որ այստեղ մենք օգտագործել ենք նոր IDENTITY տարբերակը, որն ասում է, որ ID սյունակի տվյալները կհամարակալվեն ավտոմատ կերպով՝ սկսած 1-ից, 1 քայլով, այսինքն. նոր գրառումներ ավելացնելիս նրանց հաջորդաբար վերագրվելու են 1, 2, 3 և այլն արժեքները: Նման դաշտերը սովորաբար կոչվում են ավտոմատ աճող: «IDENTITY» հատկությամբ միայն մեկ դաշտ կարող է սահմանվել աղյուսակում, և սովորաբար, բայց ոչ պարտադիր, այդպիսի դաշտն այդ աղյուսակի հիմնական բանալին է:

Մի նոտայի վրա
Տարբեր DBMS-ներում հաշվիչով դաշտերի իրականացումը կարող է իրականացվել յուրովի: MySQL-ում, օրինակ, նման դաշտը սահմանվում է՝ օգտագործելով AUTO_INCREMENT տարբերակը։ ORACLE-ում և Firebird-ում ավելի վաղ այս գործառույթը կարող էր ընդօրինակվել՝ օգտագործելով SEQUENCE: Բայց որքան գիտեմ, ORACLE-ն այժմ ավելացրել է GENERATED AS IDENTITY տարբերակը:

Եկեք ավտոմատ կերպով լրացնենք այս աղյուսակները՝ հիմնվելով Աշխատակիցների աղյուսակի Պաշտոն և բաժին դաշտերում գրանցված ընթացիկ տվյալների վրա.

Լրացրեք Պաշտոնների աղյուսակի Անուն դաշտը եզակի արժեքներով Աշխատակիցների աղյուսակի Պաշտոն դաշտից INSERT Positions (Name) SELECT DISTINCT Position FROM Employees WHERE Position NO NULL - մերժել գրառումները, որոնց դիրքը նշված չէ:
Եկեք նույնն անենք բաժինների աղյուսակի համար.

INSERT բաժիններ (անունը) SELECT DISTINCT բաժինը աշխատակիցներից, որտեղ բաժինը NULL չէ
Եթե ​​մենք հիմա բացենք «Դիրքեր» և «Բաժիններ» աղյուսակները, ապա ID դաշտի համար կտեսնենք արժեքների համարակալված շարք.

SELECT * FROM Պաշտոններից

Ընտրեք * Բաժանմունքներից

Այս աղյուսակներն այժմ կխաղան տեղեկատուների դեր՝ պաշտոններ և բաժիններ նշանակելու համար: Այժմ մենք կանդրադառնանք աշխատանքի և բաժինների ID-ներին: Նախ, եկեք ստեղծենք նոր դաշտեր Employees աղյուսակում՝ նույնացուցիչի տվյալները պահելու համար.

Ավելացրեք դաշտ պաշտոնի համար ID ALTER TABLE Employees ADD PositionID int - ավելացրեք դաշտ բաժնի ID-ի համար ALTER TABLE Employees ADD DepartmentID int
Հղման դաշտերի տեսակը պետք է լինի նույնը, ինչ հղումներում, այս դեպքում այն ​​int է:

Կարող եք նաև աղյուսակում միանգամից մի քանի դաշտ ավելացնել մեկ հրամանով՝ նշելով ստորակետերով առանձնացված դաշտերը.

ALTER TABLE Employees ADD PositionID int, DepartmentID int
Այժմ մենք այս դաշտերի համար կգրենք հղումներ (հղման սահմանափակումներ՝ ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ), որպեսզի օգտատերը չկարողանա այս դաշտերում գրել այն արժեքները, որոնք բացակայում են տեղեկատու գրքերում հայտնաբերված ID արժեքների մեջ:

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԸ Աշխատակիցներ ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ FK_Employees_PositionID ԱՐՏԱՔԻՆ ԲԱՆԱԼ (PositionID) Հղումներ Պաշտոններ (ID)
Եվ մենք նույնը կանենք երկրորդ դաշտի համար.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցներ ADD CONSTRAINT FK_Employees_DepartmentID ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ (DepartmentID) Հղումներ բաժիններ (ID)
Այժմ օգտվողը կկարողանա մուտքագրել միայն ID արժեքները համապատասխան գրացուցակից այս դաշտերում: Համապատասխանաբար, նոր բաժին կամ պաշտոնից օգտվելու համար նա նախ պետք է համապատասխան գրացուցակում նոր գրառում ավելացնի։ Որովհետեւ պաշտոններն ու բաժինները այժմ պահվում են գրացուցակներում մեկ օրինակով, այնուհետև անունը փոխելու համար բավական է այն փոխել միայն գրացուցակում:

Հղման սահմանափակման անվանումը սովորաբար կոմպոզիտային է, այն բաղկացած է «FK_» նախածանցից, այնուհետև հաջորդում է աղյուսակի անվանումը, իսկ ընդգծումից հետո հայտնվում է այն դաշտի անվանումը, որը վերաբերում է հղման աղյուսակի նույնացուցիչին:

Նույնացուցիչը (ID) սովորաբար ներքին արժեք է, որն օգտագործվում է միայն հղումների համար, և այն արժեքը, որը պահվում է այնտեղ, շատ դեպքերում բացարձակապես անտարբեր է, այնպես որ ձեզ հարկավոր չէ փորձել ազատվել առաջացող թվերի հաջորդականության անցքերից: աղյուսակի հետ աշխատանքի ընթացքում, օրինակ՝ տեղեկատու գրքույկից գրառումները ջնջելուց հետո։

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԻ աղյուսակը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿԻՉ սահմանափակման_անուն ՕՏԱՐ ԲԱՆԱԼԻ (դաշտ1, դաշտ2, ...) Հղումներ հղում_աղյուսակ (դաշտ1, դաշտ2, ...)
Այս դեպքում «dir_table» աղյուսակում առաջնային բանալին ներկայացված է մի քանի դաշտերի համակցությամբ (դաշտ1, դաշտ2, ...):

Փաստորեն, հիմա եկեք թարմացնենք PositionID և DepartmentID դաշտերը տեղեկագրքերից ID արժեքներով: Եկեք այս նպատակով օգտագործենք DML UPDATE հրամանը.

UPDATE e SET PositionID = (SELECT ID FROM Positions WHERE Name = e.Position), DepartmentID = (SELECT ID FROM Departments WHERE Name = e.Department) FROM Employees e.
Տեսնենք, թե ինչ եղավ՝ գործարկելով հարցումը.

SELECT * FROM Աշխատակիցներից

Վերջ, PositionID և DepartmentID դաշտերը լրացվում են նույնացուցիչներով հաստիքների և ստորաբաժանումների համապատասխան, Աշխատակիցների աղյուսակում Պաշտոն և բաժին դաշտերի կարիք չկա, կարող եք ջնջել այս դաշտերը.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿ Աշխատակիցներ ԴՐՈՊ ՍՅՈՒՆԱԿ Պաշտոն, բաժին
Այժմ աղյուսակը ստացել է հետևյալ ձևը.

SELECT * FROM Աշխատակիցներից

ID Անուն Ծննդյան օր Էլ Պաշտոն ID Բաժնի ID
1000 Իվանով Ի.Ի. ԴԱՏԱՐԿ ԴԱՏԱՐԿ 2 1
1001 Պետրով Պ.Պ. ԴԱՏԱՐԿ ԴԱՏԱՐԿ 3 3
1002 Սիդորով Ս.Ս. ԴԱՏԱՐԿ ԴԱՏԱՐԿ 1 2
1003 Անդրեև Ա.Ա. ԴԱՏԱՐԿ ԴԱՏԱՐԿ 4 3

Նրանք. արդյունքում մենք ազատվեցինք ավելորդ տեղեկատվության պահպանումից։ Այժմ, ըստ պաշտոնի և ստորաբաժանման համարների, մենք կարող ենք եզակիորեն որոշել նրանց անունները, օգտագործելով տեղեկատու աղյուսակների արժեքները.

SELECT e.ID, e.Name, p.Name PositionName, d.Name DepartmentName FROM Employees e LEFT JOIN բաժիններ d ON d.ID = e.DepartmentID LEFT JOIN Positions p ON p.ID = e.PositionID

Օբյեկտների տեսուչում մենք կարող ենք տեսնել այս աղյուսակի համար ստեղծված բոլոր օբյեկտները: Այստեղից դուք կարող եք տարբեր մանիպուլյացիաներ կատարել այս օբյեկտների հետ, օրինակ՝ վերանվանել կամ ջնջել օբյեկտները:

Հարկ է նաև նշել, որ աղյուսակը կարող է վերաբերել իրեն, այսինքն. դուք կարող եք ստեղծել ռեկուրսիվ հղում: Օրինակ՝ աշխատողների հետ մեր աղյուսակում ավելացնենք ևս մեկ ManagerID դաշտ, որը ցույց կտա այն աշխատողին, ում ենթակա է այս աշխատակիցը։ Եկեք ստեղծենք դաշտ.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԻ Աշխատակիցներ ADD ManagerID int
NULL-ը թույլատրվում է այս դաշտում, դաշտը դատարկ կլինի, եթե, օրինակ, աշխատողից բարձր վերադասներ չլինեն։

Այժմ եկեք ստեղծենք ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ Աշխատակիցների աղյուսակում.

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԸ Աշխատակիցներ ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ FK_Employees_ManagerID ԱՐՏԱՔԻՆ ԲԱՆԱԼԻ (ManagerID) Հղումներ Աշխատակիցներ (ID)
Եկեք հիմա ստեղծենք դիագրամ և տեսնենք, թե ինչպես են մեր աղյուսակների միջև եղած հարաբերությունները դրա վրա.

Արդյունքում, մենք պետք է տեսնենք հետևյալ պատկերը (Աշխատակիցների աղյուսակը կապված է Պաշտոնների և Վարչությունների աղյուսակների հետ, ինչպես նաև վերաբերում է իրեն).

Ի վերջո, պետք է ասել, որ հղման ստեղները կարող են ներառել լրացուցիչ ընտրանքներ ON DELETE CASCADE և ON UPDATE CASCADE, որոնք պատմում են, թե ինչպես վարվել տեղեկատու աղյուսակում նշված գրառումը ջնջելիս կամ թարմացնելիս: Եթե ​​նշված տարբերակները նշված չեն, ապա մենք չենք կարող փոխել տեղեկատու աղյուսակի ID-ն այն գրառումների համար, որոնց հղումներ կան մեկ այլ աղյուսակից, ինչպես նաև մենք չենք կարողանա ջնջել այդպիսի գրառումը հղումից մինչև չջնջենք բոլոր տողերը, որոնք վերաբերում են դրան: այս գրառումը, կամ մենք կթարմացնենք այս տողերի հղումները այլ արժեքով:

Օրինակ, եկեք վերստեղծենք աղյուսակը ON DELETE CASCADE տարբերակով FK_Employees_DepartmentID-ի համար:

DROP TABLE Employees CREATE TABLE Employees (ID int NOT NULL, Անունը nvarchar (30), Ծննդյան ամսաթիվ, Էլ. փոստ nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID_K_Deploymentepartepart) ) Հղումներ բաժիններ (ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCES Positions (ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFEREIDES (ManagerID) REFEREIDES, Nan (ManagerID) ID REFEREIDES), (ManagerID) REFEREIDES) «19550219», 2,1, NULL), (1001, N «Petrov PP», «19831203», 3,3,1003), (1002 , N «Sidorov SS», «19760607», 1,2,1000) , (1003, N «Անդրեև Ա.Ա.», «19820417», 4,3,1000)
Բաժանմունքների աղյուսակից ջնջենք ID 3-ով բաժինը.

Ջնջել բաժինները, որտեղ ID = 3
Դիտարկենք Աշխատակիցների աղյուսակի տվյալները.

SELECT * FROM Աշխատակիցներից

ID Անուն Ծննդյան օր Էլ Պաշտոն ID Բաժնի ID Manager ID
1000 Իվանով Ի.Ի. 1955-02-19 ԴԱՏԱՐԿ 2 1 ԴԱՏԱՐԿ
1002 Սիդորով Ս.Ս. 1976-06-07 ԴԱՏԱՐԿ 1 2 1000

Ինչպես տեսնում եք, 3-րդ բաժնի տվյալները նույնպես ջնջվել են Աշխատակիցների աղյուսակից:

ON UPDATE CASCADE տարբերակը նույն կերպ է վարվում, բայց այն աշխատում է, երբ որոնման ID-ի արժեքը թարմացվում է: Օրինակ, եթե մենք փոխենք պաշտոնի ID-ն աշխատանքի գրացուցակում, ապա Աշխատակիցների աղյուսակում DepartmentID-ը կթարմացվի նոր ID արժեքով, որը մենք նշել ենք գրացուցակում: Բայց այս դեպքում դա պարզապես հնարավոր չի լինի ցույց տալ, քանի որ Բաժանմունքների աղյուսակի ID սյունակն ունի IDENTITY տարբերակ, որը թույլ չի տա մեզ կատարել հետևյալ հարցումը (փոխել բաժնի ID 3-ը 30-ի).

ԹԱՐՄԱՑՆԵԼ բաժինները SET ID = 30 ՈՐՏԵՂ ID = 3
Գլխավորը հասկանալ այս 2 տարբերակների էությունը Ջնջել ԿԱՍԿԱԴԻ ​​և ԹԱՐՄԱՑՆԵԼՈՒ ԿԱՍԿԱԴԻ ​​ՄԱՍԻՆ: Ես օգտագործում եմ այս տարբերակները շատ հազվադեպ դեպքերում, և ես խորհուրդ եմ տալիս ուշադիր մտածել նախքան դրանք օգտագործելը հղումների սահմանափակումների մեջ: եթե դուք պատահաբար ջնջեք գրառումը որոնման աղյուսակից, դա կարող է հանգեցնել մեծ խնդիրների և ստեղծել շղթայական ռեակցիա:

Եկեք վերականգնենք 3-րդ բաժինը.

Տվեք թույլտվություն ավելացնելու/փոխելու IDENTITY արժեքը SET IDENTITY_INSERT բաժիններ ON INSERT բաժինների (ID, Անուն) VALUES (3, N «IT») - արգելել IDENTITY արժեքի ավելացումը/փոխելը SET IDENTITY_INSERT բաժինները OFF
Եկեք ամբողջությամբ մաքրենք Employees աղյուսակը՝ օգտագործելով TRUNCATE TABLE հրամանը.

TRUNCATE TABLE Աշխատակիցներ
Եվ կրկին, վերբեռնեք տվյալները դրա մեջ՝ օգտագործելով նախորդ INSERT հրամանը.

INSERT Employees (ID, Name, Birthday, PositionID, DepartmentID, ManagerID) VALUES (1000, N "Ivanov I.I.", "19550219", 2,1, NULL), (1001, N "Petrov P.P." , "19831203", 3 ,3,1003), (1002, N «Սիդորով Ս.Ս.», «19760607», 1,2,1000), (1003, N «Անդրեև Ա.Ա.», «19820417», 4,3,1000)

Եկեք ամփոփենք

Այս պահին մեր գիտելիքներին ավելացվել են ևս մի քանի DDL հրամաններ.
  • IDENTITY հատկանիշի ավելացում դաշտում - թույլ է տալիս այս դաշտը ավտոմատ կերպով լրացնել (հաշվիչի դաշտ) աղյուսակի համար;
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԱՎԵԼԱՑՆԵԼ list_of_fields_with_characteristics - թույլ է տալիս նոր դաշտեր ավելացնել աղյուսակում;
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԿԱԹԵԼ ՍՅՈՒՆ list_of_field - թույլ է տալիս ջնջել դաշտերը աղյուսակից;
  • ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄսահմանափակում_անուն ՕՏԱՐ ԲԱՆԱԼԻ(դաշտեր) Հղումներ reference_table (դաշտեր) - թույլ է տալիս սահմանել աղյուսակի և հղման աղյուսակի հարաբերությունները:

Այլ սահմանափակումներ՝ ԵԶԱԿԱԼ, ԼԱՆԿԱԴՐՎԱԾ, ՍՏՈՒԳՈՒՄ

UNIQUE սահմանափակումով կարող եք ասել, որ տվյալ դաշտի կամ դաշտերի հավաքածուի յուրաքանչյուր տողի արժեքները պետք է եզակի լինեն: Employees աղյուսակի դեպքում մենք կարող ենք նման սահմանափակում դնել Email դաշտում։ Պարզապես նախապես լրացրեք Email արժեքները, եթե դրանք արդեն սահմանված չեն.

UPDATE Employees SET Email = " [էլփոստը պաշտպանված է]"WHERE ID = 1000 UPDATE Employees SET Email =" [էլփոստը պաշտպանված է]"WHERE ID = 1001 UPDATE Employees SET Email =" [էլփոստը պաշտպանված է]"WHERE ID = 1002 UPDATE Employees SET Email =" [էլփոստը պաշտպանված է]«WHERE ID = 1003
Եվ այժմ դուք կարող եք եզակիության սահմանափակում դնել այս դաշտում.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցները ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ UQ_Employees_Email ՅՈՒՐԱՔԱՆԱԿԱՆ (Էլ.փոստ)
Այժմ օգտատերը չի կարողանա մուտքագրել նույն էլ.փոստը մի քանի աշխատակիցների համար:

Եզակիության սահմանափակումը սովորաբար կոչվում է հետևյալ կերպ. սկզբում գալիս է «UQ_» նախածանցը, այնուհետև աղյուսակի անվանումը, իսկ ընդգծումից հետո նշվում է այն դաշտի անվանումը, որի վրա կիրառվում է այս սահմանափակումը:

Համապատասխանաբար, եթե դաշտերի համակցությունը պետք է եզակի լինի աղյուսակի տողերի համատեքստում, ապա մենք թվարկում ենք դրանք՝ բաժանված ստորակետերով.

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԻ աղյուսակի_անունը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿԻՉ սահմանափակման_անվանումը ԵԶԱԿԻԱԿԱՆ (դաշտ1, դաշտ2, ...)
Դաշտին DEFAULT սահմանափակում ավելացնելով՝ մենք կարող ենք սահմանել լռելյայն արժեք, որը կփոխարինվի, եթե նոր գրառում տեղադրելիս այս դաշտը նշված չէ INSERT հրամանի դաշտերի ցանկում։ Այս սահմանափակումը կարող է ուղղակիորեն սահմանվել աղյուսակ ստեղծելիս:

Եկեք նոր Appointment Date դաշտ ավելացնենք Employees աղյուսակում և այն անվանենք HireDate և ասենք, որ այս դաշտի լռելյայն արժեքը ընթացիկ ամսաթիվն է.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցներ ԱՎԵԼԱՑՆԵԼ աշխատանքի ընդունման ամսաթիվը NOT NULL DEFAULT SYSDATETIME ()
Կամ եթե HireDate սյունակն արդեն գոյություն ունի, ապա կարող է օգտագործվել հետևյալ շարահյուսությունը.

ALTER TABLE Աշխատակիցներ ADD DEFAULT SYSDATETIME () FOR HireDate
Այստեղ ես չնշեցի սահմանափակման անունը, քանի որ DEFAULT-ի դեպքում ես այն կարծիքին էի, որ դա այնքան էլ քննադատական ​​չէ: Բայց եթե դա անում ես բարեկամաբար, ապա, կարծում եմ, պետք չէ ծուլանալ ու նորմալ անուն տալ։ Դա արվում է հետևյալ կերպ.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցները ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME () FOR HireDate
Քանի որ այս սյունակը նախկինում գոյություն չուներ, երբ այն ավելացվի յուրաքանչյուր գրառումին, ընթացիկ ամսաթվի արժեքը կտեղադրվի HireDate դաշտում:

Նոր ռեկորդ ավելացնելիս ընթացիկ ամսաթիվը նույնպես ավտոմատ կերպով կտեղադրվի, իհարկե, եթե այն հստակ չսահմանենք, այսինքն. չի նշվի սյունակների ցանկում: Եկեք սա ցույց տանք օրինակով՝ առանց ավելացված արժեքների ցանկում HireDate դաշտը նշելու.

INSERT Employees (ID, Name, Email) VALUES (1004, N "Sergeev S.S.", " [էլփոստը պաշտպանված է]")
Տեսնենք, թե ինչ եղավ.

SELECT * FROM Աշխատակիցներից

ID Անուն Ծննդյան օր Էլ Պաշտոն ID Բաժնի ID Manager ID Աշխատանքի ամսաթիվ
1000 Իվանով Ի.Ի. 1955-02-19 [էլփոստը պաշտպանված է] 2 1 ԴԱՏԱՐԿ 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 Սերգեև Ս.Ս. ԴԱՏԱՐԿ [էլփոստը պաշտպանված է] ԴԱՏԱՐԿ ԴԱՏԱՐԿ ԴԱՏԱՐԿ 2015-04-08

CHECK սահմանափակումն օգտագործվում է, երբ անհրաժեշտ է ստուգել դաշտում տեղադրված արժեքները: Օրինակ, եկեք այս սահմանափակումը դնենք անձնակազմի համարի դաշտում, որը աշխատողի նույնացուցիչն է (ID): Օգտագործելով այս սահմանափակումը՝ ենթադրենք, որ անձնակազմի համարները պետք է արժեք ունենան 1000-ից 1999 թվականների միջև.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցները ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ CK_Employees_ID CHECK (ID-ը 1000-ից 1999 թ.-ի միջակայքում)
Սահմանափակումը սովորաբար կոչվում է նույնը, սկզբում գալիս է «CK_» նախածանցը, այնուհետև աղյուսակի անվանումը և այն դաշտի անվանումը, որի վրա դրված է այս սահմանափակումը:

Փորձենք տեղադրել անվավեր մուտք՝ ստուգելու համար, որ սահմանափակումն աշխատում է (մենք պետք է ստանանք համապատասխան սխալ).

INSERT Employees (ID, Email) VALUES (2000, " [էլփոստը պաշտպանված է]")
Այժմ եկեք փոխենք ներդրված արժեքը 1500-ի և համոզվենք, որ գրառումը տեղադրված է.

INSERT Employees (ID, Email) VALUES (1500, " [էլփոստը պաշտպանված է]")
Կարող եք նաև ստեղծել ՅՈՒՐԱՔԱԿԱՆ և ՍՏՈՒԳԻ սահմանափակումներ՝ առանց անուն նշելու.

ALTER TABLE Employees ADD UNIQUE (Email) ALTER TABLE Employees ADD CHECK (ID-ը 1000-ից 1999-ի միջակայքում)
Բայց սա լավ պրակտիկա չէ, և ավելի լավ է հստակորեն նշել սահմանափակման անվանումը, քանի որ. ավելի ուշ պարզելու համար, որն ավելի դժվար կլինի, դուք պետք է բացեք օբյեկտը և տեսնեք, թե ինչի համար է այն պատասխանատու:

Լավ անունով, սահմանափակման մասին շատ տեղեկություններ կարելի է ճանաչել անմիջապես նրա անունով:

Եվ, համապատասխանաբար, այս բոլոր սահմանափակումները կարող են ստեղծվել անմիջապես աղյուսակ ստեղծելիս, եթե այն արդեն գոյություն չունի։ Ջնջենք աղյուսակը.

DOP TABLE Աշխատակիցներ
Եվ մենք այն կվերստեղծենք ստեղծված բոլոր սահմանափակումներով մեկ CREATE TABLE հրամանով.

CREATE TABLE Employees (ID int NOT NULL, Անունը nvarchar (30), Ծննդյան ամսաթիվ, Էլ. փոստ nvarchar (30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME (), - ԼՐԱՌՎԱԾ-ի համար ես կթողնեմ CONSTRAINT Employees PPKMARY_բացառություն: (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENCES բաժիններ (ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) Հղումներ Պաշտոններ (ID), CONSTRAINT UQ_EmployeesQUEE_mail

INSERT Employees (ID, Name, Birthday, Email, PositionID, DepartmentID) VALUES (1000, N «Ivanov I.I.», «19550219», « [էլփոստը պաշտպանված է]", 2,1), (1001, N" Petrov P.P. "," 19831203 "," [էլփոստը պաշտպանված է]", 3,3), (1002, N" Sidorov S.S. "," 19760607 "," [էլփոստը պաշտպանված է]", 1,2), (1003, N" Andreev A.A. "," 19820417 "," [էլփոստը պաշտպանված է]",4,3)

Մի քիչ այն ինդեքսների մասին, որոնք ստեղծվել են PRIMARY KEY և UNIQUE սահմանափակումներ ստեղծելիս

Ինչպես տեսնում եք վերևի սքրինշոթում, PRIMARY KEY և UNIQUE սահմանափակումներ ստեղծելիս ավտոմատ կերպով ստեղծվել են նույն անուններով ինդեքսներ (PK_Employees և UQ_Employees_Email): Լռելյայնորեն, հիմնական բանալիի ինդեքսը ստեղծվում է որպես CLUSTERED, իսկ մնացած բոլոր ինդեքսների համար որպես NONCLUSTERED: Պետք է ասել, որ ոչ բոլոր DBMS-ներն ունեն կլաստերային ինդեքսի հայեցակարգը։ Աղյուսակը կարող է ունենալ միայն մեկ ԿԼԱՍՏԵՐ ինդեքս: CLUSTERED - նշանակում է, որ աղյուսակի գրառումները կդասավորվեն ըստ այս ինդեքսի, կարող եք նաև ասել, որ այս ինդեքսն ուղիղ մուտք ունի աղյուսակի բոլոր տվյալներին: Սա աղյուսակի, այսպես ասած, հիմնական ցուցանիշն է։ Ավելի կոպիտ ասած, դա սեղանին ամրացված ցուցանիշ է: Կլաստերային ինդեքսը շատ հզոր գործիք է, որը կարող է օգնել ձեզ օպտիմալացնել ձեր հարցումները, պարզապես հիշեք դա առայժմ: Եթե ​​մենք ուզում ենք ասել, որ կլաստերային ինդեքսն օգտագործվի ոչ թե հիմնական բանալիում, այլ մեկ այլ ինդեքսի համար, ապա հիմնական բանալին ստեղծելիս պետք է նշենք NONCLUSTERED տարբերակը.

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿԻ աղյուսակի_անունը ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿԻՉ սահմանափակման_անուն ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԸ ՈՉ ԿԼՅՈՒՍՏԵՐ (դաշտ1, դաշտ2, ...)
Օրինակ, եկեք PK_Employees սահմանափակումների ինդեքսը դարձնենք ոչ կլաստերային, իսկ UQ_Employees_Email սահմանափակման ինդեքսը՝ կլաստերավորված: Առաջին հերթին մենք կհանենք այս սահմանափակումները.

ALTER TABLE Employees DROP CONSTRAINT PK_Employees ALTER TABLE Employees DROP CONSTRAINT UQ_Employees_Email
Այժմ եկեք ստեղծենք դրանք CLUSTERED և NONCLUSTERED տարբերակներով.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցներ ԱՎԵԼԱՑՆԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ PK_Employees ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻ ՈՉ ԿԼՅՈՒՍՏԵՐ (ID) ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ Աշխատակիցներ ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (Email)
Այժմ, Employees աղյուսակից վերցնելուց հետո, մենք կարող ենք տեսնել, որ գրառումները դասավորված են կլաստերային UQ_Employees_Email ինդեքսով.

SELECT * FROM Աշխատակիցներից

ID Անուն Ծննդյան օր Էլ Պաշտոն ID Բաժնի 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 ինդեքսը կլաստերացված ինդեքս էր, գրառումները դասավորված էին ըստ ID-ի՝ լռելյայն:

Բայց այս դեպքում սա ընդամենը մի օրինակ է, որը ցույց է տալիս կլաստերային ինդեքսի էությունը, քանի որ Ամենայն հավանականությամբ, Աշխատակիցների աղյուսակում հարցումներ կկատարվեն ID դաշտով, և որոշ դեպքերում այն ​​կարող է ինքնին հանդես գալ որպես տեղեկատու:

Որոնումների համար սովորաբար խորհուրդ է տրվում, որ կլաստերային ինդեքսը կառուցվի առաջնային բանալու վրա, քանի որ հարցումներում մենք հաճախ դիմում ենք գրացուցակի նույնացուցիչին, օրինակ, անունը (Պաշտոն, բաժին): Այստեղ մենք հիշում ենք այն, ինչ գրել եմ վերևում, որ կլաստերային ինդեքսն ուղղակիորեն հասանելի է աղյուսակի տողերին, և դրանից բխում է, որ մենք կարող ենք ստանալ ցանկացած սյունակի արժեքը՝ առանց լրացուցիչ ծախսերի:

Առավել հաճախ ընտրված դաշտերում ձեռնտու է կիրառել կլաստերային ինդեքս:

Երբեմն աղյուսակներում բանալին ստեղծվում է փոխարինող դաշտով, որի դեպքում օգտակար է պահպանել CLUSTERED index տարբերակը ավելի հարմար ինդեքսի համար և նշել NONCLUSTERED տարբերակը փոխարինող առաջնային բանալին ստեղծելիս:

Եկեք ամփոփենք

Այս փուլում մենք ծանոթացանք բոլոր տեսակի սահմանափակումներին՝ իրենց ամենապարզ ձևով, որոնք ստեղծվում են «ALTER TABLE table_name ADD CONSTRAINT constraint_name ...» ձևի հրամանով.
  • ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ- առաջնային բանալին;
  • ՕՏԱՐ ԲԱՆԱԼԻ- հղումների տեղադրում և տվյալների հղման ամբողջականության վերահսկում.
  • ՅՈՒՐԱՔԱՆԱԿԱՆ- թույլ է տալիս ստեղծել եզակիություն;
  • ՍՏՈՒԳՈՒՄ- թույլ է տալիս մուտքագրված տվյալների ճշգրտությունը.
  • ԼԱՆԿԱԴՐՎԱԾ- թույլ է տալիս սահմանել լռելյայն արժեքը;
  • Հարկ է նաև նշել, որ բոլոր սահմանափակումները կարող են վերացվել՝ օգտագործելով « հրամանը ՓՈՓՈԽԱԿԱՆ ՍԵՂԱՆԱԿսեղան_անունը ԿԱԹԵԼ ՍԱՀՄԱՆԱՓԱԿՈՒՄ constraint_name":
Մասամբ անդրադարձանք նաև ինդեքսների թեմային և վերլուծեցինք կլաստեր հասկացությունը ( ԿԼԱՍՏԵՐ) և ոչ կլաստերային ( ՈՉ ԿԱԼՈՒՍՏԵՐ) ինդեքս.

Ստեղծեք առանձին ինդեքսներ

Ինքնապահովումը այստեղ վերաբերում է այն ինդեքսներին, որոնք ստեղծված չեն ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻ կամ եզակի սահմանափակումների համար:

Ըստ դաշտի կամ դաշտերի ինդեքսները կարող են ստեղծվել հետևյալ հրամանով.

CREATE INDEX IDX_Employees_Name ON Employees (Անուն)
Նաև այստեղ կարող եք նշել CLUSTERED, NONCLUSTERED, UNIQUE տարբերակները և կարող եք նաև նշել տեսակավորման ուղղությունը յուրաքանչյուր առանձին դաշտի ASC (լռելյայն) կամ DESC:

ՍՏԵՂԾԵԼ ԵՆՔԱԿԱՆ ՈՉ ԿԼՅՈՒՍՏԵՐ ԻՆԴԵՔՍ UQ_Employees_EmailDesc ON Employees (Email DESC)
Ոչ կլաստերային ինդեքս ստեղծելիս NONCLUSTERED տարբերակը կարող է թողարկվել, քանի որ այն լռելյայն է և ցուցադրվում է այստեղ պարզապես հրամանի մեջ CLUSTERED կամ NONCLUSTERED տարբերակի դիրքը ցույց տալու համար:

Դուք կարող եք ջնջել ինդեքսը հետևյալ հրամանով.

DROP INDEX IDX_Employees_Name ON Employees
Պարզ ինդեքսներ, ինչպես սահմանափակումները, կարող են ստեղծվել CREATE TABLE հրամանի համատեքստում:

Օրինակ, եկեք նորից գցենք աղյուսակը.

DOP TABLE Աշխատակիցներ
Եվ մենք այն կվերստեղծենք ստեղծված բոլոր սահմանափակումներով և ինդեքսներով մեկ CREATE TABLE հրամանով.

CREATE TABLE Աշխատակիցներ (ID int NOT NULL, Անունը nvarchar (30), Ծննդյան ամսաթիվ, Էլ. փոստ nvarchar (30), PositionID int, DepartmentID int, HireDate NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETEMTRATIDRID, Manager, Manager: CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENCES բաժիններ (ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCES Պաշտոններ (ID), CONSTRAINT FK_Employees_NIGN KEY (ID), CONSTRAINT FK_Employees_NIGHY9)
Ի վերջո, եկեք աղյուսակի մեջ մտցնենք մեր աշխատակիցներին.

INSERT Employees (ID, Name, Birthday, Email, PositionID, DepartmentID, ManagerID) VALUES (1000, N «Ivanov I.I.», «19550219», « [էլփոստը պաշտպանված է]", 2,1, NULL), (1001, N" Petrov P.P. "," 19831203 "," [էլփոստը պաշտպանված է]", 3,3,1003), (1002, N" Sidorov S.S. "," 19760607 "," [էլփոստը պաշտպանված է]", 1,2,1000), (1003, N" Andreev A.A. "," 19820417 "," [էլփոստը պաշտպանված է]",4,3,1000)
Բացի այդ, հարկ է նշել, որ դուք կարող եք արժեքներ ներառել ոչ կլաստերային ինդեքսի մեջ՝ դրանք նշելով INCLUDE-ում: Նրանք. Այս դեպքում INCLUDE ինդեքսը որոշակիորեն նման կլինի կլաստերային ինդեքսին, միայն այժմ ինդեքսը չի ամրացվում աղյուսակին, բայց անհրաժեշտ արժեքները պտտվում են ինդեքսի վրա: Համապատասխանաբար, նման ինդեքսները կարող են զգալիորեն բարելավել ընտրված հարցումների կատարումը (SELECT), եթե նշված բոլոր դաշտերը առկա են ինդեքսում, ապա հնարավոր է, որ ընդհանրապես անհրաժեշտ չլինի մուտք գործել աղյուսակ: Բայց սա, բնականաբար, մեծացնում է ինդեքսի չափը, քանի որ թվարկված դաշտերի արժեքները կրկնօրինակվում են ինդեքսում:

Հատված MSDN-ից.Ընդհանուր հրամանի շարահյուսություն ինդեքսներ ստեղծելու համար

ՍՏԵՂԾԵԼ [ՅՈՒՐԱՔԱԿԱՆ] [ԿԼԱՍՏԵՐ | NONCLUSTERED] INDEX index_name ON (սյունակ [ASC | DESC] [, ... n]) [INCLUDE (սյունակի_անունը [, ... 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) NOT NULL AUTO_INCREMENT ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԻ,

գերան VARCHAR (10),

անցնել VARCHAR (10),

ամսաթիվ DATE

Երկրորդ տողում մենք գրել ենք երեք հատկանիշ. Տեսնենք, թե ինչ են նշանակում.

  • NOT NULL հատկանիշը նշանակում է, որ բջիջը դատարկ չի լինի (այս դաշտը պարտադիր է);
  • AUTO_INCREMENT արժեքը - ավտոմատ լրացում;
  • PRIMARY KEY-ը հիմնական բանալին է:

Ինչպես ավելացնել տեղեկատվություն

Ստեղծված աղյուսակի դաշտերը արժեքներով լրացնելու համար օգտագործեք INSERT հայտարարությունը: Մենք գրում ենք կոդի հետևյալ տողերը.

ՄՏՐԵԼ «Սեղանի» մեջ

(մուտք, անցում, ամսաթիվ) ԱՐԺԵՔՆԵՐ

('Vasa', '87654321 ',' 2017-06-21 18:38:44 ');

Փակագծերում նշում ենք սյունակների անվանումները, իսկ հաջորդում՝ արժեքները։

Կարևոր! Դիտեք սյունակների անունների և իմաստների հաջորդականությունը:

Ինչպես թարմացնել տեղեկատվությունը

Դա անելու համար օգտագործեք UPDATE հրամանը: Տեսնենք, թե ինչպես փոխել գաղտնաբառը կոնկրետ օգտվողի համար: Մենք գրում ենք կոդի հետևյալ տողերը.

ԹԱՐՄԱՑՆԵԼ «աղյուսակի» SET անցաթուղթը = «12345678» WHERE id = «1»

Այժմ փոխեք «12345678» գաղտնաբառը: Փոփոխություններ են կատարվում «id» = 1 տողում: Եթե ​​դուք չգրեք WHERE հրամանը, բոլոր տողերը կփոխվեն, ոչ թե կոնկրետ մեկը:

Խորհուրդ եմ տալիս գնել գիրքը» SQL Dummies-ի համար «. Նրա օգնությամբ դուք կկարողանաք պրոֆեսիոնալ կերպով աշխատել տվյալների բազայի հետ քայլ առ քայլ: Ամբողջ տեղեկատվությունը կառուցված է պարզից մինչև բարդ և լավ կընդունվի:

Ինչպես ջնջել մուտքը

Եթե ​​սխալ եք գրել, ուղղեք այն DELETE հրամանով։ Աշխատում է նույնը, ինչ UPDATE-ը: Մենք գրում ենք հետևյալ կոդը.

Ջնջել «աղյուսակից», ՈՐՏԵՂ id = «1»

Տեղեկությունների առբերում

Տվյալների բազայից արժեքներ ստանալու համար օգտագործեք SELECT հրամանը: Մենք գրում ենք հետևյալ կոդը.

SELECT * FROM «աղյուսակից», WHERE id = «1»

Այս օրինակում մենք ընտրում ենք աղյուսակի բոլոր հասանելի դաշտերը: Դա տեղի է ունենում, եթե հրամանում գրեք աստղանիշ «*»: Եթե ​​Ձեզ անհրաժեշտ է ընտրել որոշ նմուշային արժեք, մենք գրում ենք այսպես.

SELECT մատյան, անցիր աղյուսակից WHERE id = '1'

Հարկ է նշել, որ տվյալների բազաների հետ աշխատելու ունակությունը բավարար չի լինի։ Պրոֆեսիոնալ ինտերնետ նախագիծ ստեղծելու համար դուք պետք է սովորեք, թե ինչպես ավելացնել տվյալների բազայից էջերին: Դա անելու համար ծանոթացեք php վեբ ծրագրավորման լեզվին: Սա կօգնի ձեզ դասարանային դասընթաց Միխայիլ Ռուսակովի կողմից .


Սեղան գցելը

Առաջանում է DROP հարցումով: Դա անելու համար գրեք հետևյալ տողերը.

DOP TABLE սեղան;

Սեղանից ձայնագրության դուրսբերում ըստ որոշակի պայմանի

Մտածեք այսպիսի ծածկագիր.

ԸՆՏՐԵԼ id, երկիրը, քաղաքը աղյուսակից, որտեղ մարդիկ> 150000000

Այն կցուցադրի այն երկրների գրառումները, որտեղ բնակչությունը գերազանցում է հարյուր հիսուն միլիոնը:

միություն

Միանալու միջոցով հնարավոր է միացնել բազմաթիվ աղյուսակներ: Ինչպես է այն աշխատում, տես այս տեսանյութը ավելի մանրամասն.

PHP և MySQL

Եվս մեկ անգամ ուզում եմ ընդգծել, որ համացանցային նախագիծ ստեղծելիս հարցումներ կատարելը սովորական բան է։ php փաստաթղթերում դրանք օգտագործելու համար հետևեք հետևյալ ընթացակարգին.

  • Մենք միանում ենք տվյալների բազային՝ օգտագործելով mysql_connect () հրամանը;
  • Օգտագործելով mysql_select_db () ընտրեք անհրաժեշտ տվյալների բազան;
  • Մենք հարցումը մշակում ենք՝ օգտագործելով mysql_fetch_array ();
  • Կապը փակում ենք mysql_close () հրամանով։

Կարևոր! Տվյալների բազայի հետ աշխատելը դժվար չէ։ Գլխավորը հարցումը ճիշտ գրելն է։

Սկսնակ վեբ վարպետները կմտածեն. Ի՞նչ կարդալ այս թեմայով: Ես կցանկանայի խորհուրդ տալ Մարտին Գրաբերի գիրքը» SQL հասարակ մահկանացուների համար «. Գրված է այնպես, որ սկսնակների համար ամեն ինչ պարզ լինի։ Օգտագործեք այն որպես տեղեկատու գիրք:

Բայց սա տեսություն է։ Ինչպիսի՞ն է իրավիճակը գործնականում։ Իրականում ինտերնետային նախագիծը ոչ միայն պետք է ստեղծվի, այլև Google-ի և Yandex-ի ԹՈՓ-ի մեջ մտցվի: Տեսադասընթաց» Կայքի ստեղծում և առաջխաղացում ».


Վիդեո հրահանգ

Դեռ ունե՞ք հարցեր: Ավելի մանրամասն դիտեք առցանց տեսանյութը։

Արդյունք

Այսպիսով, sql հարցումներ գրելու հետ գործ ունենալը այնքան էլ դժվար չէ, որքան թվում է, բայց ցանկացած վեբ վարպետ պետք է դա անի: Սա կօգնի վերը նկարագրված վիդեո դասընթացներին: Բաժանորդագրվել իմ VKontakte խումբը լինել առաջինը, ով կիմանա նոր հետաքրքիր տեղեկատվության ի հայտ գալու մասին.

Ժամանակակից վեբ հավելվածների մեծ մասը փոխազդում է տվյալների շտեմարանների հետ՝ սովորաբար օգտագործելով այն լեզուն, որը կոչվում է SQL. Բարեբախտաբար, այս լեզուն շատ հեշտ է սովորել: Այս հոդվածում մենք կանդրադառնանք պարզ SQL հարցումներ և սովորեք, թե ինչպես դրանք օգտագործել՝ հետ շփվելու համար MySQL տվյալների բազա.

Ինչ է ձեզ պետք:

SQL (Structured Query Language) լեզու, որը հատուկ նախագծված է տվյալների բազայի կառավարման համակարգերի հետ փոխազդելու համար, ինչպիսիք են MySQL, Oracle, Sqlite եւ ուրիշներ ... Կատարել SQL այս հոդվածի հարցումները, խորհուրդ եմ տալիս տեղադրել MySQL տեղական համակարգչին: Նաև խորհուրդ եմ տալիս օգտագործել phpMyAdmin որպես տեսողական ինտերֆեյս:

Այս ամենը հասանելի է բոլորի սիրելի Դենվերում։ Կարծում եմ՝ բոլորը պետք է իմանան, թե դա ինչ է և որտեղից ձեռք բերել :): Կարող էայլապես օգտագործեք WAMP կամ MAMP:

Դենվերն ունի ներկառուցված MySQL մխիթարել. Մենք կօգտագործենք այն։

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ.տվյալների բազայի ստեղծում

Սա մեր առաջին խնդրանքն է։ Մենք կստեղծենք մեր առաջին տվյալների բազան հետագա աշխատանքի համար։

Նախ, բաց MySQL մխիթարել և մուտք գործել: Համար WAMP լռելյայն գաղտնաբառը դատարկ է: Այսինքն՝ ոչինչ :)։ Համար MAMP-ը «արմատ» է: Դենվերի համար պետք է պարզաբանել.

Մուտք գործելուց հետո մուտքագրեք հետևյալ տողը և սեղմեքՄուտքագրեք:

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ my_first_db;

Նկատի ունեցեք, որ ստորակետը (;) ավելացվում է հարցման վերջում, ինչպես մյուս լեզուներում:

Տես նաև հրամաններ SQL-ում գործի զգայուն: Մենք դրանք գրում ենք մեծ տառերով։

Տարբերակ միայն: Նիշերի հավաքածուև Համադրում

Եթե ​​ցանկանում եք տեղադրելնիշերի հավաքածուն և համադրումը կարող են լինել գրեք հետևյալ հրամանը.

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱ my_first_db ԼՐԱՌՎԱԾ ՆՇԱՆԱՎՈՐՆԵՐԻ ԿԱԶՄԱՑՈՒՄ utf8 ՀԱՎԱՔԵԼ utf8_general_ci;

Գտնում է նիշերի հավաքածուների ցանկը, որոնք աջակցվում են MySQL.

ՑՈՒՑԱԴՐԵԼ ՏՎՅԱԼՆԵՐԻ ՇՏԵՄԱՆԵՐԸ.թվարկում է բոլոր տվյալների բազաները

Այս հրամանն օգտագործվում է բոլոր առկա տվյալների բազաները ցուցադրելու համար:

ԿԱՑԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ.տվյալների բազայի ջնջում

Դուք կարող եք թողնել առկա DB-ն՝ օգտագործելով այս հարցումը:

Զգույշ եղեք այս հրամանից, քանի որ այն աշխատում է առանց նախազգուշացման: Եթե ​​ձեր տվյալների բազան պարունակում է տվյալներ, դրանք բոլորը կջնջվեն:

ՕԳՏԱԳՈՐԾԵԼ:Տվյալների բազայի ընտրություն

Տեխնիկապես սա հարցում չէ, այլ օպերատոր և չի պահանջում վերջում ստորակետ:

Այն ասում է MySQL-ին ընտրեք նախնական տվյալների բազան ընթացիկ նստաշրջանի համար: Այժմ մենք պատրաստ ենք ստեղծել աղյուսակներ և այլ բաներ անել տվյալների բազայի հետ:

Ի՞նչ է աղյուսակը տվյալների բազայում:

Դուք կարող եք ներկայացնել աղյուսակը DB-ում որպես Excel ֆայլ.

Ինչպես նկարում, աղյուսակներն ունեն սյունակների անուններ, տողեր և տեղեկություններ: Օգտագործելով SQL հարցումներ, մենք կարող ենք ստեղծել նման աղյուսակներ: Մենք կարող ենք նաև ավելացնել, կարդալ, թարմացնել և ջնջել տեղեկատվությունը:

ՍԵՂԱՆԱԿ ՍՏԵՂԾԵԼ. Սեղանի ստեղծում

Գ օգտագործելով այս հարցումը, մենք կարող ենք աղյուսակներ ստեղծել տվյալների բազայում: Կներեք, փաստաթղթերը MySQL Այս հարցում նորեկների համար այնքան էլ պարզ չէ: Այս տեսակի հարցման կառուցվածքը կարող է շատ բարդ լինել, բայց մենք կսկսենք հեշտից:

Հետևյալ հարցումը կստեղծի աղյուսակ 2 սյունակով:

CREATE TABLE օգտվողներ (օգտանուն VARCHAR (20), create_date DATE);

Խնդրում ենք նկատի ունենալ, որ մենք կարող ենք գրել մեր հարցումները մի քանի տողերի վրա և ներդիրներով՝ ներդիրներով:

Առաջին տողը պարզ է. Մենք պարզապես ստեղծում ենք աղյուսակ, որը կոչվում է «օգտատերեր»: Հաջորդը, փակագծերում, բաժանված ստորակետերով, կա բոլոր սյունակների ցանկը: Յուրաքանչյուր սյունակի անունից հետո մենք ունենք տեղեկատվության տեսակներ, ինչպիսիք են VARCHAR կամ DATE:

VARCHAR (20) նշանակում է, որ սյունակը տողի տիպի է և կարող է ունենալ առավելագույնը 20 նիշ երկարություն: DATE-ը նաև տեղեկատվության տեսակ է, որն օգտագործվում է այս ձևաչափով ամսաթվերը պահելու համար՝ «ՏՏՏՏ - MM-ՕՕ»:

ՀԻՄՆԱԿԱՆ ԲԱՆԱԼ ( առաջնային բանալինը)

Նախքան հաջորդ հարցումը կատարելը, մենք նաև պետք է ներառենք «user_id»-ի սյունակ, որը կլինի մեր հիմնական բանալին: Դուք կարող եք պատկերացնել ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԸ որպես տեղեկատվություն, որն օգտագործվում է աղյուսակի յուրաքանչյուր տողը նույնականացնելու համար:

CREATE TABLE օգտվողներ (user_id INT AUTO_INCREMENT PRIMARY KEY, օգտվողի անունը VARCHAR (20), create_date DATE);

ԻՆՏ կազմում է 32 բիթանոց ամբողջ թվի տեսակ (ինչպես թվերը): AUTO_INCREMENT ավտոմատ կերպով առաջացնում է նոր արժեք ID ամեն անգամ, երբ մենք ավելացնում ենք տեղեկատվության նոր տողեր: Սա ընտրովի է, բայց այն հեշտացնում է ամբողջ գործընթացը:

Պարտադիր չէ, որ այս սյունակը լինի ամբողջ թիվ, բայց այն ամենից հաճախ օգտագործվում է: Հիմնական բանալիի առկայությունը նույնպես կամընտիր է, սակայն այն խորհուրդ է տրվում տվյալների բազայի ճարտարապետության և աշխատանքի համար:

Եկեք գործարկենք հարցումը.

ՑՈՒՑԱԴՐԵԼ ՍԵՂԱՆԱԿՆԵՐԸ.ցույց տալ բոլոր աղյուսակները

Այս հարցումը թույլ է տալիս ստանալ տվյալների բազայում գտնվող աղյուսակների ցանկը:

ԲԱՑԱՏՐԵԼ.Ցույց տալ աղյուսակի կառուցվածքը

Դուք կարող եք օգտագործել այս հարցումը՝ գոյություն ունեցող աղյուսակի կառուցվածքը ցույց տալու համար:

Սյունակները ցուցադրվում են բոլոր հատկություններով:

ԿԱՌՆԵԼ ՍԵՂԱՆԱԿ:ջնջել աղյուսակը

Ճիշտ այնպես, ինչպես ՏԵՂԵԿԱՏՎԵԼ ՏՎՅԱԼՆԵՐԻ ՇԵԶԵՐԸ, այս հարցումն առանց նախազգուշացման ջնջում է աղյուսակը և դրա բովանդակությունը:

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿ. փոխել աղյուսակը

Այս հարցումը կարող է նաև պարունակել բարդ կառուցվածք՝ աղյուսակում այն ​​ավելի շատ փոփոխությունների պատճառով: Եկեք նայենք մի քանի օրինակների:

(եթե աղյուսակը ջնջել եք վերջին քայլում, նորից ստեղծեք այն թեստերի համար)

ՍՅՈՒՆ ԱՎԵԼԱՑՆՈՒՄ

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ օգտատերերը ԱՎԵԼԱՑՆԵԼ էլ. նամակ VARCHAR (100) օգտանունից հետո;

SQL-ի լավ ընթեռնելիության պատճառով, կարծում եմ, իմաստ չունի մանրամասն բացատրել այն։ Մենք ավելացնում ենք նոր սյունակ «էլ.» «օգտանունից» հետո:

ՍՅՈՒՆ ՋՆԵԼՈՎ

Դա նույնպես շատ հեշտ էր։ Օգտագործեք այս հարցումը զգուշությամբ, քանի որ կարող եք ջնջել տվյալները առանց նախազգուշացման:

Վերականգնեք այն սյունակը, որը հենց նոր հեռացրեցիք հետագա փորձարկման համար:

ՓՈՓՈԽՈՒԹՅՈՒՆ ԿԱՏԱՐԵԼՈՎ ՍՅՈՒՆՈՒՄ

Երբեմն դուք կարող եք ցանկանալ փոփոխություններ կատարել սյունակի հատկությունների մեջ, և դրա համար անհրաժեշտ չէ ամբողջությամբ ջնջել այն:

Այս հարցումը օգտվողի սյունակը վերանվանեց «user_name» և փոխեց դրա տեսակը VARCHAR (20)-ից VARCHAR (30): Նման փոփոխությունը չպետք է փոխի աղյուսակի տվյալները։

INSERT: Աղյուսակում տեղեկատվության ավելացում

Եկեք որոշ տեղեկություններ ավելացնենք աղյուսակին՝ օգտագործելով հետևյալ հարցումը.

Ինչպես տեսնում եք, VALUES () արժեքների ցուցակը պարունակում է ստորակետերով բաժանված: Բոլոր արժեքները մեկ սյունակներում են: Եվ արժեքները պետք է լինեն սյունակների հերթականությամբ, որոնք սահմանվել են աղյուսակի ստեղծման ժամանակ:

Նկատի ունեցեք, որ PRIMARY KEY դաշտի առաջին NULL արժեքը կոչվում է «user_id»: Մենք դա անում ենք, որպեսզի ID-ն ինքնաբերաբար ստեղծվի, քանի որ սյունակն ունի AUTO_INCREMENT հատկություն: Երբ տեղեկատվությունը առաջին անգամ ավելացվի, ID-ն կլինի 1: Հաջորդ շարքը 2-ն է և այլն...

ԱՅԼԸՆՏՐԱՆՔԱՅԻՆ ՏԱՐԲԵՐԱԿ

Կա տողեր ավելացնելու այլ հարցման տարբերակ։

Այս անգամ մենք օգտագործում ենք SET հիմնաբառը VALUES-ի փոխարեն, և այն չունի փակագծեր: Կան մի քանի նրբերանգներ.

Սյունակը կարելի է բաց թողնել: Օրինակ, մենք «user_id»-ին արժեք չենք հատկացրել, որը լռելյայն կլինի իր AUTO_INCREMENT արժեքով: Եթե ​​բաց թողնեք VARCHAR սյունակը, ապա կավելացվի դատարկ տող:

Յուրաքանչյուր սյունակ պետք է նշվի անունով: Դրա պատճառով դրանք կարող են նշվել ցանկացած հերթականությամբ, ի տարբերություն նախորդ տարբերակի։

ԱՅԼԸՆՏՐԱՆՔԱՅԻՆ ՏԱՐԲԵՐԱԿ 2

Ահա ևս մեկ տարբերակ.

Կրկին, քանի որ կան հղումներ սյունակի անվան վերաբերյալ, կարող եք արժեքները տրամադրել ցանկացած կարգով:

LAST_INSERT_ID ()

Դուք կարող եք օգտագործել այս հարցումը, որպեսզի ստանաք ID-ն, որը AUTO_INCREMENT էր ընթացիկ նստաշրջանի վերջին տողի համար:

ՀԻՄԱ ()

Հիմա ժամանակն է ցույց տալու, թե ինչպես կարող եք օգտագործել MySQL ֆունկցիան հարցումներում:

NOW () ֆունկցիան ցուցադրում է ընթացիկ ամսաթիվը: Այսպիսով, դուք կարող եք օգտագործել այն, որպեսզի սյունակի ամսաթիվը ավտոմատ կերպով սահմանեք ընթացիկ ամսաթվին, երբ տեղադրեք նոր տող:

Նկատի ունեցեք, որ մենք ստացել ենք 1 նախազգուշացում, բայց անտեսեք այն։ Սրա պատճառն այն է, որ NOW ()-ն օգտագործվում է նաև ժամանակավոր տեղեկատվության ցուցադրման համար։

ԸՆՏՐԵԼ: Տվյալների ընթերցում աղյուսակից

Եթե ​​աղյուսակին ավելացնենք տեղեկատվություն, ապա տրամաբանական կլինի սովորել, թե ինչպես կարդալ այն այնտեղից։ Այստեղ մեզ կօգնի SELECT հարցումը:

Ստորև ներկայացված է աղյուսակը կարդալու հնարավոր ամենապարզ SELECT հարցումը:

Այս դեպքում աստղանիշը (*) նշանակում է, որ մենք պահանջել ենք աղյուսակի բոլոր դաշտերը: Եթե ​​ցանկանում եք միայն կոնկրետ սյունակներ, հարցումը կունենա այսպիսի տեսք.

ՎիճակՈՐՏԵՂ

Ամենից հաճախ մեզ ոչ բոլոր սյունակներն են հետաքրքրում, այլ միայն մի քանիսը: Օրինակ, ենթադրենք, որ մենք ցանկանում ենք միայն «nettuts» օգտվողի էլ.փոստի հասցեն:

WHERE-ը թույլ է տալիս պայմաններ սահմանել հարցումում և կատարել մանրամասն ընտրություն:

Նկատի ունեցեք, որ մեկ հավասար նշան (=) օգտագործվում է հավասարության համար, ոչ թե երկու, ինչպես ծրագրավորման մեջ:

Կարող եք նաև համեմատություններ օգտագործել:

AND կամ OR կարող է օգտագործվել պայմանները համատեղելու համար.

Նկատի ունեցեք, որ թվային արժեքները չպետք է մեջբերվեն:

ՄԵՋ ()

Սա օգտակար է բազմաթիվ արժեքների նմուշառման համար:

Հավանել

Թույլ է տալիս կատարել «վայրի նշաններ» հարցումներ

% նշանն օգտագործվում է որպես նիշ: Այսինքն՝ ամեն ինչ կարող է լինել իր տեղում։

ՎիճակՊԱՏՎԻՐԵԼ ԿՈՂՄԻՑ

Եթե ​​ցանկանում եք ստանալ արդյունքը տեսակավորված ցանկացած չափանիշով

Լռելյայն կարգը ASC է (ցածրից բարձր): Հակառակի համար օգտագործվում է DESC:

ՍԱՀՄԱՆԱՓԱԿ ... ՕՖՍԵՏ ...

Դուք կարող եք սահմանափակել ստացված արդյունքների քանակը:

LIMIT 2-ը վերցնում է միայն առաջին 2 արդյունքները: LIMIT 1 OFFSET 2-ը ստանում է 1 արդյունք առաջին 2-ից հետո: LIMIT 2, 1-ը նշանակում է նույնը (ուղղակի ուշադրություն դարձրեք, որ սկզբում փոխհատուցվում է, իսկ հետո սահմանափակում):

ԹԱՐՄԱՑՈՒՄ. Փոփոխություններ կատարեք աղյուսակում ներկայացված տեղեկատվության մեջ

Այս հարցումն օգտագործվում է աղյուսակում տեղեկատվությունը փոխելու համար:

Շատ դեպքերում այն ​​օգտագործվում է WHERE կետի հետ միասին, քանի որ դուք, ամենայն հավանականությամբ, կցանկանաք փոփոխել որոշակի սյունակներ: Եթե ​​չկա WHERE կետ, փոփոխությունները կազդեն բոլոր տողերի վրա:

Կարող եք նաև օգտագործել LIMIT՝ փոփոխման կարիք ունեցող տողերի քանակը սահմանափակելու համար:

ՋՆՋԵԼ. Աղյուսակից տեղեկատվության հեռացում

Ինչպես UPDATE-ը, այս հարցումն օգտագործվում է WHERE-ով.

Աղյուսակի բովանդակությունը ջնջելու համար կարող եք դա անել ուղղակի այսպես.

Ջնջել օգտվողներից;

Բայց ավելի լավ է օգտագործելԿտրվել

Ջնջելուց բացի, այս հարցումը նաև զրոյացնում է արժեքները AUTO_INCREMENT և նորից տողեր ավելացնելիս հաշվումը կսկսվի զրոյից։ՋՆՋԵԼ դա չի անում, և հետհաշվարկը շարունակվում է:

Ստորին արժեքների և հատուկ բառերի անջատում

Լարային արժեքներ

Որոշ նիշեր պետք է անջատվեն (փախչել ), կամ կարող են խնդիրներ լինել։

Դրա համար օգտագործվում է հակադարձ շեղ:(\).

Հատուկ խոսքեր

Քանի որ MySQL-ում շատ հատուկ բառեր կան (ԸՆՏՐԵԼ կամ ԹԱՐՄԱՑՆԵԼ ), դրանք օգտագործելիս սխալներից խուսափելու համար դուք պետք է օգտագործեք չակերտներ։ Բայց ոչ թե սովորական մեջբերումներ, այլ սրանք(`).

Այսինքն, ձեզ հարկավոր է ավելացնել «» անունով սյունակջնջել «, դա պետք է արվի այսպես.

Եզրակացություն

Շնորհակալություն մինչև վերջ կարդալու համար: Հուսով եմ, որ այս հոդվածը օգտակար էր ձեզ համար: Այն դեռ չի ավարտվել: Շարունակելի:).

Ձեր ուշադրությանն եմ ներկայացնում SQL հոդվածի անվճար թարգմանությունը սկսնակների համար

Ավելի ու ավելի շատ ժամանակակից վեբ հավելվածներ փոխազդում են տվյալների բազաների հետ՝ սովորաբար օգտագործելով լեզուն SQL... Բարեբախտաբար մեզ համար, այս լեզուն բավականին հեշտ է սովորել: Այս հոդվածում մենք կսկսենք սովորել SQL հարցումների հիմունքները և ինչպես են դրանք փոխազդում տվյալների բազայի հետ: MySQL.

Այն, ինչ ձեզ հարկավոր է

SQL (Structured Query Language) լեզու է, որը նախատեսված է փոխգործակցելու տվյալների բազայի կառավարման համակարգերի (DBMS) հետ, ինչպիսիք են. MySQL, Oracle, Sqliteեւ ուրիշներ. Այս հոդվածից SQL հարցումները կատարելու համար ես ենթադրում եմ, որ դուք տեղադրել եք MySQL... Ես նաև խորհուրդ եմ տալիս օգտագործել phpMyAdminորպես տեսողական ցուցադրման գործիք MySQL.

Հետևյալ հավելվածները կհեշտացնեն դրա տեղադրումը MySQLև phpMyAdminձեր համակարգչին՝

  • WAMP Windows-ի համար
  • MAMP Mac-ի համար

Սկսենք հարցումների կատարումը հրամանի տողում։ WAMPայն արդեն պարունակում է վահանակում MySQL... Համար MAMP, գուցե անհրաժեշտ լինի կարդալ սա:

Ստեղծել տվյալների բազա. Ստեղծել տվյալների բազա

Մեր առաջին խնդրանքը. Մենք կստեղծենք տվյալների բազա՝ աշխատելու համար:

Առաջին հերթին, բացեք վահանակը MySQLև մուտք գործել: Համար WAMP, լռելյայնորեն օգտագործվում է դատարկ գաղտնաբառ: Համար MAMPգաղտնաբառը պետք է լինի «root»:

Մուտք գործելուց հետո մուտքագրեք այս հարցումը և սեղմեք Մուտքագրեք:

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ my_first_db;

Նկատի ունեցեք, որ հարցման վերջում ավելացվում է ստորակետ (;), ինչպես ձեր կոդի տողի վերջում:

Նաև հիմնաբառեր ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆմեծատառերի անզգույշ, ինչպես բոլոր հիմնաբառերը SQL... Բայց մենք դրանք կգրենք մեծատառերով՝ ավելի լավ ընթեռնելի լինելու համար:

Նշում. նիշերի հավաքածու և համադրում

Եթե ​​ցանկանում եք սահմանել լռելյայն նիշերի հավաքածուն և համադրման կարգը, օգտագործեք նմանատիպ հարցում.

ՍՏԵՂԾԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱ my_first_db ԼՐԱՌՎԱԾ ՆՇԱՆԱՎՈՐՆԵՐԻ ԿԱԶՄԱՑՈՒՄ utf8 ՀԱՎԱՔԵԼ utf8_general_ci;

Դուք կգտնեք աջակցվող նիշերի հավաքածուների և համադրումների ցանկը MySQL.

ՑՈՒՑԱԴՐԵԼ ՏՎՅԱԼՆԵՐԻ ՇԵՄԵՐԸ. Բոլոր տվյալների բազաների ցանկը

Այս հարցումն օգտագործվում է բոլոր տվյալների բազաները ցուցադրելու համար:

ԿԱՌՆԵԼ ՏՎՅԱԼՆԵՐԻ ԲԱԶԱՆ. Գցում է տվյալների բազան

Այս հարցումով դուք կարող եք բաց թողնել առկա տվյալների բազան:

Զգույշ եղեք այս հարցումից, քանի որ այն չի ցուցադրում որևէ նախազգուշացում: Ձեր տվյալների բազայում աղյուսակներ և տվյալներ ունենալուց հետո հարցումը բոլորը կջնջի մի ակնթարթում:

Տեխնիկապես ասած՝ սա խնդրանք չէ։ Այն «օպերատոր» է և վերջում ստորակետ չի պահանջում։

Նա տեղեկացնում է MySQLոր դուք պետք է ընտրեք լռելյայն տվյալների բազան և աշխատեք դրա հետ մինչև նիստի ավարտը։ Այժմ մենք պատրաստ ենք ստեղծել աղյուսակներ, իսկ մնացածը այս տվյալների բազայում:

Ի՞նչ է տվյալների բազայի աղյուսակը:

Դուք կարող եք պատկերացնել աղյուսակը տվյալների բազայում որպես սովորական աղյուսակ կամ որպես csv ֆայլ, որն ունի կառուցվածքային տվյալներ:

Ինչպես այս օրինակում, աղյուսակն ունի տողերի անուններ և տվյալների սյունակներ: Օգտագործելով SQL հարցումները, մենք կարող ենք ստեղծել այս աղյուսակը: Մենք կարող ենք նաև ավելացնել, կարդալ, փոփոխել և ջնջել տվյալները:

ՍԵՂԱՆԱԿ ՍՏԵՂԾԵԼ. Ստեղծել աղյուսակ

Այս հարցումով մենք կարող ենք աղյուսակ ստեղծել տվյալների բազայում: Ներողություն, փաստաթղթերը MySQLոչ այնքան բարեկամական նոր օգտվողների համար: Այս հարցման կառուցվածքը կարող է շատ բարդ լինել, բայց մենք կսկսենք պարզից:

Հետևյալ հարցումը երկու սյունակով աղյուսակ է ստեղծում:

CREATE TABLE օգտվողներ (օգտանուն VARCHAR (20), create_date DATE);

Խնդրում ենք նկատի ունենալ, որ մենք կարող ենք հարցում գրել մի քանի տողերի վրա և օգտագործել Ներդիրխորացման համար.

Առաջին տողը պարզ է. Մենք ստեղծում ենք աղյուսակ անունով օգտվողներ... Այնուհետև փակագծերում աղյուսակի սյունակները թվարկված են՝ բաժանված ստորակետերով: Յուրաքանչյուր սյունակի անվանմանը հաջորդում է տվյալների տեսակը, օրինակ ՎԱՐՉԱՐկամ DATE.

ՎԱՐՉԱՐ (20)նշանակում է, որ սյունակը լարային է և կարող է լինել ոչ ավելի, քան 20 նիշ երկարությամբ: DATE- տվյալների տեսակը, որը նախատեսված է ամսաթվերը պահելու համար՝ «ՏՏՏՏ-ԱՄՄ-ՕՕ» ձևաչափով:

Առաջնային բանալին

Նախքան այս հարցումը կատարելը, մենք պետք է տեղադրենք սյունակ օգտագործողի այ - Դի, որը լինելու է ՀԻՄՆԱԿԱՆ ԲԱՆԱԼԸ: Առանց շատ մանրամասնելու, դուք կարող եք մտածել առաջնային բանալին որպես աղյուսակի տվյալների յուրաքանչյուր տող ճանաչելու միջոց:

Հարցումը դառնում է այսպես.

CREATE TABLE օգտվողներ (user_id INT AUTO_INCREMENT PRIMARY KEY, օգտվողի անունը VARCHAR (20), create_date DATE);

ԻՆՏ- 32-բիթանոց ամբողջ թվի տեսակը (թվային): AUTO_INCREMENTԱմեն անգամ, երբ տվյալների տող ավելացվում է, ավտոմատ կերպով ստեղծում է նոր ID համար: Դա պարտադիր չէ, բայց դրա հետ ավելի հարմար է։

Այս սյունակը կարող է ամբողջ թիվ չլինել, թեև սա տվյալների ամենատարածված տեսակն է: Հիմնական բանալի սյունակը կամընտիր է, բայց խորհուրդ է տրվում օգտագործել այն՝ բարելավելու ձեր տվյալների բազայի աշխատանքը և ճարտարապետությունը:

Եկեք գործարկենք հարցումը.

ՑՈՒՑԱԴՐԵԼ ՍԵՂԱՆԱԿՆԵՐԸ. Բոլոր աղյուսակների ցանկը

Հարցումը թույլ է տալիս ստանալ ընթացիկ տվյալների բազայի բոլոր աղյուսակների ցանկը:

ԲԱՑԱՏՐԵԼ. Ցույց տալ աղյուսակի կառուցվածքը

Օգտագործեք այս հարցումը՝ գոյություն ունեցող աղյուսակի կառուցվածքը տեսնելու համար:

Արդյունքում ցուցադրվում են դաշտերը (սյունակները) և դրանց հատկությունները:

ԿԱՌՆԵԼ ՍԵՂԱՆ. Գցում է սեղանը

Նույնպես ԳՈՐԾԵԼ ՏՎՅԱԼՆԵՐԻ ՇԵՄԵՐԸ, այս հարցումը ջնջում է աղյուսակը և դրա բովանդակությունը՝ առանց որևէ նախազգուշացման։

ՓՈՓՈԽԵԼ ԱՂՅՈՒՍԱԿ. Փոփոխել աղյուսակը

Նման հարցումը կարող է բարդ լինել, քանի որ այն կարող է բազմաթիվ փոփոխություններ կատարել աղյուսակում: Եկեք նայենք մի քանի պարզ օրինակների:

Ընթեռնելիության շնորհիվ SQL, այս խնդրանքն ինքնին հասկանալի է։

Հեռացնելը նույնքան հեշտ է: Օգտագործեք հարցումը զգուշությամբ, տվյալները ջնջվում են առանց նախազգուշացման:

Կրկին ավելացնենք դաշտը էլ, հետագայում դեռ անհրաժեշտ կլինի.

ՓՈՓՈԽԵԼ ՍԵՂԱՆԱԿԻ օգտատերերը ԱՎԵԼԱՑՆԵԼ էլ. նամակ VARCHAR (100) օգտանունից հետո;

Երբեմն ձեզ կարող է անհրաժեշտ լինել փոխել սյունակի հատկությունները, պետք չէ ջնջել այն և նորից ստեղծել:

Այս հարցումը վերանվանում է դաշտը օգտագործողի անունը v օգտագործողի անունըև փոխում է իր տեսակը ՎԱՐՉԱՐ (20)վրա ՎԱՐՉԱՐ (30)... Նման փոփոխությունները չեն ազդում աղյուսակի տվյալների վրա:

INSERT. Տվյալների ավելացում աղյուսակում

Եկեք աղյուսակում գրառումներ ավելացնենք հարցումների միջոցով:

Ինչպես տեսնում ես, ԱՐԺԵՔՆԵՐ ()պարունակում է ստորակետերով բաժանված արժեքների ցանկ: Լարային արժեքները կցվում են մեկ չակերտների մեջ: Արժեքները պետք է լինեն աղյուսակի ստեղծման ժամանակ նշված հերթականությամբ:

Նշենք, որ առաջին արժեքն է ԴԱՏԱՐԿառաջնային բանալու համար, որի դաշտը մենք անվանեցինք օգտագործողի այ - Դի... Բոլորը, քանի որ դաշտը նշված է որպես AUTO_INCREMENTև ID-ն ստեղծվում է ավտոմատ կերպով: Տվյալների առաջին շարքը կունենա 1 id: Հաջորդ տողը, որը պետք է ավելացվի, 2-ն է և այլն:

Այլընտրանքային շարահյուսություն

Ահա ևս մեկ շարահյուսություն տողերի տեղադրման համար:

Այս անգամ օգտագործեցինք հիմնաբառը SETփոխարեն ԱՐԺԵՔՆԵՐ... Նկատենք մի քանի բան.

  • Սյունակը կարող է բաց թողնել: Օրինակ՝ դաշտին արժեք չենք հատկացրել օգտագործողի այ - Դիքանի որ այն նշված է որպես AUTO_INCREMENT... Եթե ​​դուք արժեք չեք վերագրում տիպի դաշտին ՎԱՐՉԱՐ, ապա լռելյայնորեն այն կընդունի դատարկ տողի արժեքը (եթե աղյուսակը ստեղծելիս այլ լռելյայն արժեք չի նշվել):
  • Յուրաքանչյուր սյունակ կարող է հղում կատարել անունով: Հետևաբար, դաշտերը կարող են լինել ցանկացած հերթականությամբ, ի տարբերություն նախորդ շարահյուսության:

Այլընտրանքային շարահյուսություն թիվ 2

Ահա ևս մեկ օրինակ.

Ինչպես նախկինում, դուք կարող եք անվանել դաշտերը, դրանք կարող են գնալ ցանկացած հաջորդականությամբ:

Օգտագործեք այս հարցումը՝ վերջին տեղադրված տողի ID-ն ստանալու համար:

ՀԻՄԱ ()

Ժամանակն է ցույց տալ ձեզ, թե ինչպես օգտագործել գործառույթները MySQLհարցումներում։

Գործառույթ ՀԻՄԱ ()վերադարձնում է ընթացիկ ամսաթիվը: Օգտագործեք այն՝ ընթացիկ ամսաթիվը տիպի դաշտում ավտոմատ ավելացնելու համար DATE.

Խնդրում ենք նկատի ունենալ, որ մենք նախազգուշացում ենք ստացել MySQLբայց սա այնքան էլ կարևոր չէ: Պատճառն այն է, որ ֆունկցիան ՀԻՄԱ ()իրականում վերադարձնում է ժամանակի տեղեկատվությունը:

Մենք դաշտ ենք ստեղծել ստեղծել_ամսաթիվորը կարող է պարունակել միայն ամսաթիվ և ոչ թե ժամ, ուստի տվյալները կրճատվել են: Փոխարեն ՀԻՄԱ ()մենք կարող էինք օգտագործել CURDATE ()որը վերադարձնում է միայն ընթացիկ ամսաթիվը, բայց վերջնական արդյունքը կլինի նույնը:

SELECT. Տվյալների առբերում աղյուսակից

Ակնհայտ է, որ մեր գրած տվյալները անօգուտ են, քանի դեռ չենք կարող կարդալ դրանք։ Խնդրանքը գալիս է օգնության ԸՆՏՐԵԼ.

Հարցման օգտագործման ամենապարզ օրինակը ԸՆՏՐԵԼաղյուսակից տվյալները կարդալու համար.

Աստղանիշը (*) նշանակում է, որ մենք ցանկանում ենք ստանալ աղյուսակի բոլոր սյունակները: Եթե ​​Ձեզ անհրաժեշտ է միայն որոշակի սյունակներ ստանալ, օգտագործեք նման բան.

Ավելի հաճախ, քան ոչ, մենք ցանկանում ենք ստանալ միայն որոշակի տողեր, ոչ բոլորը: Օրինակ, եկեք ստանանք օգտատիրոջ էլեկտրոնային փոստի հասցեն ցանցեր.

Դա նման է IF պայմանին: WHERE-ն թույլ է տալիս հարցման մեջ պայման դնել և ստանալ ցանկալի արդյունք:

Մեկ նշանը (=) օգտագործվում է հավասարության պայմանի համար, այլ ոչ թե կրկնակի (==), որը դուք հավանաբար օգտագործում եք ծրագրավորման մեջ:

Կարող եք նաև օգտագործել այլ պայմաններ.

ԵՎև ԿԱՄօգտագործվում են պայմանները համատեղելու համար.

Նկատի ունեցեք, որ թվային արժեքները չպետք է փակվեն չակերտների մեջ:

ՄԵՋ ()

Օգտագործվում է մի քանի արժեքների հետ համեմատելու համար:

Հավանել

Թույլ է տալիս սահմանել որոնման ձևանմուշ:

Տոկոսային նշանը (%) օգտագործվում է օրինաչափությունը նշելու համար:

ՊԱՏՎԻՐԵԼ ԸՍՏ կետի

Օգտագործեք այս պայմանը, եթե ցանկանում եք, որ արդյունքը վերադարձվի տեսակավորված.

Լռելյայն կարգն է ASC(Աճող): Ավելացնել DESCհակառակ հերթականությամբ տեսակավորել.

ՍԱՀՄԱՆԱՓԱԿ ... ՕՖՍԵՏ ...

Դուք կարող եք սահմանափակել վերադարձված տողերի քանակը:

ՍԱՀՄԱՆԱՓԱԿ 2վերցնում է առաջին երկու տողերը. LIMIT 1 OFFSET 2առաջին երկուսից հետո վերցնում է մեկ տող: ՍԱՀՄԱՆԱՓԱԿ 2, 1նշանակում է նույնը, միայն առաջին համարն է օֆսեթը, իսկ երկրորդը սահմանափակում է տողերի քանակը։

ԹԱՐՄԱՑՈՒՄ. Տվյալների թարմացում աղյուսակում

Այս հարցումն օգտագործվում է աղյուսակի տվյալները թարմացնելու համար:

Շատ դեպքերում հետ համատեղ օգտագործվում է ՈՐՏԵՂորոշակի տողեր թարմացնելու համար: Եթե ​​պայմանը ՈՐՏԵՂնշված չէ, փոփոխությունները կկիրառվեն բոլոր տողերի վրա:

Փոփոխական տողերը սահմանափակելու համար կարող եք օգտագործել ՍԱՀՄԱՆ.

ՋՆՋԵԼ. Տվյալների ջնջում աղյուսակից

Նույնպես , այս հարցումը հաճախ օգտագործվում է պայմանի հետ միասին ՈՐՏԵՂ.

ԿՏՐՎԱԾ ՍԵՂԱՆ

Աղյուսակից բովանդակությունը հեռացնելու համար օգտագործեք այսպիսի հարցում.

Ջնջել օգտվողներից;

Ավելի լավ կատարողական օգտագործման համար .

Նաև զրոյացնում է դաշտի հաշվիչը AUTO_INCREMENT, այնպես որ նոր ավելացված տողերը կունենան id հավասար 1: Օգտագործելիս դա տեղի չի ունենա, և հաշվիչը կշարունակի աճել:

Փախուստ տողային արժեքներից և հատուկ բառերից

Լարային արժեքներ

Որոշ կերպարներից պետք է փախչել, հակառակ դեպքում կարող են խնդիրներ առաջանալ:

Հետադարձ կտրվածքը (\) օգտագործվում է փախուստի համար:

Սա շատ կարևոր է անվտանգության նկատառումներից ելնելով: Տվյալների բազայում գրվելուց առաջ օգտատիրոջ ցանկացած տվյալ պետք է դուրս գրվի: Վ PHPօգտագործել mysql_real_escape_string () ֆունկցիան կամ պատրաստված հայտարարությունները:

Հատուկ խոսքեր

Քանի որ ներս MySQLշատ վերապահված բառեր, ինչպիսիք են ԸՆՏՐԵԼկամ Շփոթությունից խուսափելու համար սյունակների և աղյուսակների անունները փակցրեք չակերտների մեջ: Ավելին, դուք պետք է օգտագործեք ոչ թե սովորական չակերտներ, այլ հետադարձներ (`):

Ենթադրենք, ինչ-ինչ պատճառներով ցանկանում եք ավելացնել անունով սյունակ :

Եզրակացություն

Շնորհակալություն հոդվածը կարդալու համար: Հուսով եմ, որ կարողացա ձեզ ցույց տալ այդ լեզուն SQLշատ ֆունկցիոնալ և հեշտ է սովորել: