Një udhëzues i ilustruar vetë-studimi për SQL për fillestarët. Arkivat e kategorive: Libra mbi SQL Gjuha e programimit sql për dummies

Nga autori: Të kanë quajtur çajnik? Epo, kjo është e rregullueshme! Çdo samovar ka qenë dikur një çajnik! Apo çdo profesionist dikur ishte samovar? Jo, përsëri diçka nuk është në rregull! Në përgjithësi, MySQL është për fillestarët.

Pse dummies kanë nevojë për MySQL

Nëse do ta lidhni seriozisht jetën tuaj me internetin, atëherë në hapat e parë në "web" do të hasni në këtë DBMS. MySQL mund të quhet në mënyrë të sigurtë sistemi i menaxhimit të bazës së të dhënave "gjithë Interneti". Asnjë burim i vetëm pak a shumë serioz nuk mund të bëjë pa të, ai është i pranishëm në panelin e administratorit të secilit host. Dhe mbi të gjitha CMS të njohura dhe madje edhe motorë të bërë vetë janë ndërtuar me pjesëmarrjen e saj.

Në përgjithësi, nuk mund të bëni pa këtë platformë. Por për ta studiuar atë, ju duhet gjithashtu qasja e duhur, mjetet e duhura dhe më e rëndësishmja, dëshira dhe durimi. Shpresoj të keni mjaft nga këto të fundit. Dhe përgatituni për faktin se truri juaj do të vlojë dhe avulli do të bjerë nga koka juaj, si nga një çajnik i vërtetë

Por MySQL është kaq e vështirë për dummies vetëm nëse filloni ta mësoni gabimisht. Ne nuk do të bëjmë një gabim të tillë dhe do të fillojmë njohjen tonë me këtë teknologji që në fillim.

Konceptet bazë

Së pari, le të kalojmë nëpër konceptet bazë që do të përmendim në këtë postim:

Baza e të dhënave (DB) është njësia kryesore përbërëse e DBMS. Baza e të dhënave përfshin tabela që përbëhen nga kolona dhe regjistrime (rreshta). Qelizat e formuara në kryqëzim përmbajnë të dhëna të strukturuara të një lloji të caktuar.

DBMS (sistemi i menaxhimit të bazës së të dhënave) - një grup i të gjitha moduleve softuerike për administrimin e bazës së të dhënave.

SQL është një gjuhë e strukturuar e pyetjeve, me ndihmën e së cilës zhvilluesi "komunikon" me bërthamën (serverin) e DBMS. Si çdo gjuhë programimi, SQL ka sintaksën e vet, grupin e komandave dhe operatorëve, llojet e të dhënave të mbështetura.

Mendoj se kemi njohuri të mjaftueshme teorike për të filluar. Boshllëqet e munguara në teori do t'i "pikturojmë" me praktikën. Tani gjithçka që mbetet është të zgjidhni mjetin e duhur të softuerit.

Gjetja e mjetit të duhur

Duke "gërmuar" paksa në të gjithë gamën e predhave MySQL për fillestarët, kuptova se këto thjesht nuk ekzistojnë. Të gjitha produktet softuerike për administrimin e DBMS kërkojnë një server të instaluar tashmë të bazës së të dhënave. Në përgjithësi, vendosa edhe një herë të mos rishpik "skuterin" dhe zgjodha paketën vendase Denwer. Mund ta shkarkoni në faqen zyrtare të internetit.

Ai tashmë përfshin të gjithë komponentët e DBMS, duke i lejuar një fillestari të fillojë njohjen praktike me MySQL menjëherë pas një instalimi të thjeshtë dhe të kuptueshëm. Përveç kësaj, Denwer përfshin disa mjete të tjera të nevojshme për një zhvillues fillestar: server lokal, PHP.

Hapat e parë

Unë nuk do të përshkruaj procesin e instalimit të grupit "zotërinj", pasi gjithçka ndodh automatikisht atje. Pas nisjes së instalimit, keni kohë vetëm për të shtypur tastet e nevojshme. Vetëm ajo që ju nevojitet në versionin bedel të MySQL.

Kur procesi i instalimit të përfundojë, nisni serverin lokal, prisni disa sekonda. Pas kësaj, shkruani localhost në shiritin e adresave të shfletuesit tuaj.

Në faqen "Hurray, po funksionon!" ndiqni një nga lidhjet në foto. Pastaj do të çoheni te phpMyAdmin - një guaskë për administrimin e bazës së të dhënave.

Duke klikuar në lidhjen http://downloads.mysql.com/docs/world.sql.zip, do të shkarkoni një bazë të dhënash mostër testimi nga faqja zyrtare e MySQL. Shkoni përsëri te phpMyAdmin, në menunë kryesore në krye shkoni te skeda "Import". Në dritaren "Import në aktual" në seksionin e parë ("Skedari që do të importohet") vendosni vlerën "Shfleto kompjuterin tuaj".

Në dritaren e eksploruesit, zgjidhni arkivin me bazën e të dhënave të shembullit të shkarkuar. Mos harroni të klikoni "Ok" në fund të dritares kryesore.

Unë ju këshilloj të mos ndryshoni vlerat e parametrave të specifikuara për momentin. Kjo mund të çojë në shfaqjen e gabuar të të dhënave të burimit të importuar. Nëse phpMyAdmin jep një gabim që nuk mund ta njohë algoritmin e kompresimit të bazës së të dhënave, atëherë zhbllokoni atë dhe përsërisni të gjithë procesin e importimit nga fillimi.

Nëse gjithçka shkoi mirë, atëherë mesazhi i programit do të shfaqet në krye se importi ishte i suksesshëm, dhe në të majtë në listën e DB ka një tjetër (fjalë).

Le ta shohim strukturën e tij nga brenda, në mënyrë që të imagjinoni më qartë se me çfarë do të keni të bëni.

Klikoni në emrin e bazës së të dhënave MySQL për fillestarët. Një listë e tabelave nga të cilat përbëhet do të shfaqet poshtë saj. Klikoni në njërën prej tyre. Pastaj shkoni te artikulli kryesor i menusë "Struktura". Zona kryesore e punës shfaq strukturën e tabelës: të gjithë emrat e kolonave, llojet e të dhënave dhe të gjitha atributet.

Ky tutorial është diçka si një "vulë e kujtesës sime" për gjuhën SQL (DDL, DML), d.m.th. ky është informacion që është grumbulluar gjatë veprimtarisë sime profesionale dhe ruhet vazhdimisht në kokën time. Ky është një minimum i mjaftueshëm për mua, i cili përdoret më shpesh kur punohet me bazat e të dhënave. Nëse bëhet e nevojshme të përdoren konstruksione më të plota SQL, atëherë zakonisht i drejtohem bibliotekës MSDN që ndodhet në internet për ndihmë. Për mendimin tim, është shumë e vështirë të mbash gjithçka në kokën tënde, dhe nuk ka nevojë të veçantë për këtë. Por është shumë e dobishme të njihen konstruksionet bazë, sepse ato janë të aplikueshme pothuajse në të njëjtën formë në shumë baza të dhënash relacionale si Oracle, MySQL, Firebird. Dallimet janë kryesisht në llojet e të dhënave, të cilat mund të ndryshojnë në detaje. Nuk ka aq shumë konstruksione bazë të gjuhës SQL, dhe me praktikë të vazhdueshme ato mbahen mend shpejt. Për shembull, për të krijuar objekte (tabela, kufizime, indekse, etj.), Mjafton të keni në dorë një redaktues teksti të mjedisit (IDE) për të punuar me bazën e të dhënave dhe nuk ka nevojë të studioni mjete vizuale të mprehura për duke punuar me një lloj specifik të bazës së të dhënave (MS SQL, Oracle, MySQL, Firebird, ...). Është gjithashtu i përshtatshëm sepse i gjithë teksti është para syve tuaj dhe nuk keni nevojë të kaloni nëpër skeda të shumta për të krijuar, për shembull, një indeks ose një kufizim. Me punën e vazhdueshme me një bazë të dhënash, krijimi, ndryshimi dhe veçanërisht rikrijimi i një objekti duke përdorur skriptet është shumë herë më i shpejtë sesa nëse bëhet në modalitetin vizual. Gjithashtu në modalitetin e skenarit (përkatësisht, me kujdesin e duhur), është më e lehtë të vendosni dhe kontrolloni rregullat për emërtimin e objekteve (mendimi im subjektiv). Për më tepër, skriptet janë të përshtatshme për t'u përdorur kur ndryshimet e bëra në një bazë të dhënash (për shembull, një test) duhet të transferohen në të njëjtën formë në një bazë të dhënash tjetër (produktive).

Gjuha SQL është e ndarë në disa pjesë, këtu do të diskutoj 2 pjesët më të rëndësishme të saj:
  • DML - Gjuha e manipulimit të të dhënave, e cila përmban konstruktet e mëposhtme:
    • SELECT - përzgjedhja e të dhënave
    • INSERT - futja e të dhënave të reja
    • UPDATE - përditësimi i të dhënave
    • DELETE - fshirja e të dhënave
    • MERGE - bashkimi i të dhënave
Sepse Unë jam një praktikues, do të ketë pak teori si e tillë në këtë tutorial dhe të gjitha ndërtimet do të shpjegohen me shembuj praktikë. Për më tepër, unë besoj se një gjuhë programimi, dhe veçanërisht SQL, mund të zotërohet vetëm në praktikë, duke e ndjerë atë dhe duke kuptuar se çfarë ndodh kur ekzekutoni këtë apo atë ndërtim.

Ky tutorial bazohet në parimin Hap pas Hapi, d.m.th. është e nevojshme të lexohet në mënyrë sekuenciale dhe mundësisht menjëherë duke ndjekur shembujt. Por nëse gjatë rrugës keni nevojë të mësoni më shumë për një komandë në më shumë detaje, atëherë përdorni një kërkim specifik në internet, për shembull, në bibliotekën MSDN.

Gjatë shkrimit të këtij tutoriali, u përdor versioni 2014 i bazës së të dhënave MS SQL Server, për të ekzekutuar skriptet përdora MS SQL Server Management Studio (SSMS).

Shkurtimisht rreth MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) është një mjet për Microsoft SQL Server për konfigurimin, menaxhimin dhe administrimin e komponentëve të bazës së të dhënave. Ky mjet përmban një redaktues skripti (të cilin do ta përdorim kryesisht) dhe një program grafik që punon me objektet dhe cilësimet e serverit. Mjeti kryesor në SQL Server Management Studio është Object Explorer, i cili i lejon përdoruesit të shikojë, të marrë dhe të manipulojë objektet e serverit. Ky tekst është huazuar pjesërisht nga Wikipedia.

Për të krijuar një redaktues të ri skripti, përdorni butonin New Query:

Për të ndryshuar bazën aktuale të të dhënave, mund të përdorni listën rënëse:

Për të ekzekutuar një komandë specifike (ose një grup komandash), zgjidhni atë dhe shtypni butonin Ekzekutoni ose butonin F5. Nëse ka vetëm një komandë në redaktues për momentin, ose duhet të ekzekutoni të gjitha komandat, atëherë nuk keni nevojë të zgjidhni asgjë.

Pas ekzekutimit të skripteve, veçanërisht atyre që krijojnë objekte (tabela, kolona, ​​indekse), për të parë ndryshimet, përdorni përditësimin nga menyja e kontekstit, duke theksuar grupin e duhur (për shembull, Tabelat), vetë tabelën ose grupin Kolona në të.

Në fakt, kjo është gjithçka që duhet të dimë për të ekzekutuar shembujt e dhënë këtu. Pjesa tjetër e programit SSMS është e lehtë për t'u mësuar vetë.

Pak teori

Një bazë të dhënash relacionale (RDB, ose më tej në kontekstin e vetëm një bazë të dhënash) është një koleksion tabelash që janë të ndërlidhura. Përafërsisht, një bazë të dhënash është një skedar në të cilin të dhënat ruhen në një formë të strukturuar.

DBMS është një Sistem Menaxhimi për këto baza të të dhënave, d.m.th. është një grup mjetesh për të punuar me një lloj specifik të bazës së të dhënave (MS SQL, Oracle, MySQL, Firebird, ...).

shënim
Sepse në jetën reale, në fjalimin bisedor, ne themi kryesisht: "Oracle DB", ose edhe thjesht "Oracle", në të vërtetë do të thotë "Oracle DBMS", atëherë në kontekstin e këtij tutoriali ndonjëherë do të përdoret termi DB. Nga konteksti, mendoj se do të jetë e qartë se për çfarë bëhet fjalë.

Një tabelë është një koleksion kolonash. Kolonat mund të quhen gjithashtu fusha ose kolona, ​​të gjitha këto fjalë do të përdoren në mënyrë sinonime për të shprehur të njëjtën gjë.

Tabela është objekti kryesor i RDB, të gjitha të dhënat RDB ruhen rresht pas rreshti në kolonat e tabelës. Vargjet, rekordet janë gjithashtu sinonime.

Për secilën tabelë, si dhe për kolonat e saj, jepen emra, me të cilët aksesohen më pas.
Një emër objekti (emri i tabelës, emri i kolonës, emri i indeksit, etj.) në MS SQL mund të ketë një gjatësi maksimale prej 128 karakteresh.

Per referim- në bazën e të dhënave ORACLE, emrat e objekteve mund të kenë një gjatësi maksimale prej 30 karaktere. Prandaj, për një bazë të dhënash specifike, ju duhet të zhvilloni rregullat tuaja për emërtimin e objekteve në mënyrë që të qëndroni brenda kufirit të numrit të karaktereve.

SQL është një gjuhë që ju lejon të ekzekutoni pyetje në një bazë të dhënash duke përdorur një DBMS. Në një DBMS specifike, gjuha SQL mund të ketë një zbatim specifik (dialektin e vet).

DDL dhe DML janë një nëngrup i gjuhës SQL:

  • Gjuha DDL përdoret për të krijuar dhe modifikuar strukturën e bazës së të dhënave, d.m.th. për të krijuar / modifikuar / fshirë tabela dhe lidhje.
  • Gjuha DML lejon manipulimin e të dhënave të tabelës, d.m.th. me linjat e saj. Kjo ju lejon të zgjidhni të dhëna nga tabelat, të shtoni të dhëna të reja në tabela dhe të përditësoni dhe fshini të dhënat ekzistuese.

Ekzistojnë 2 lloje komentesh që mund të përdoren në SQL (me një rresht dhe me shumë rreshta):

Koment me një rresht
dhe

/ * koment me shumë rreshta * /

Në fakt, kjo do të mjaftojë për teorinë.

DDL - Gjuha e përkufizimit të të dhënave

Për shembull, merrni parasysh një tabelë me të dhëna për punonjësit, në formën e zakonshme për një person që nuk është programues:

Në këtë rast, kolonat e tabelës kanë këto emra: Numri i personelit, emri i plotë, Data e lindjes, E-mail, Pozicioni, Departamenti.

Secila prej këtyre kolonave mund të karakterizohet nga lloji i të dhënave që përmban:

  • Numri i personelit - numër i plotë
  • Emri i plotë - varg
  • Data e lindjes - data
  • E-mail - varg
  • Pozicioni - varg
  • Departamenti - varg
Lloji i kolonës është një karakteristikë që tregon se çfarë lloj të dhënash mund të ruajë një kolonë e caktuar.

Për të filluar, do të jetë e mjaftueshme të mbani mend vetëm llojet e mëposhtme bazë të të dhënave të përdorura në MS SQL:

Kuptimi Shënimi MS SQL Përshkrim
Varg me gjatësi të ndryshueshme varchar (N)
dhe
nvarchar (N)
Me numrin N, ne mund të specifikojmë gjatësinë maksimale të mundshme të rreshtit për kolonën përkatëse. Për shembull, nëse duam të themi se vlera e kolonës "emri" mund të përmbajë maksimumi 30 karaktere, atëherë duhet ta vendosim atë në llojin nvarchar (30).
Dallimi midis varchar dhe nvarchar është se varchar ruan vargjet në formatin ASCII, ku një karakter është 1 bajt, dhe nvarchar ruan vargjet në formatin Unicode, ku çdo karakter është 2 bajt.
Lloji varchar duhet të përdoret vetëm nëse jeni 100% i sigurt se fusha nuk ka nevojë të ruajë karaktere Unicode. Për shembull, varchar mund të përdoret për të ruajtur adresat e emailit sepse ato zakonisht përmbajnë vetëm karaktere ASCII.
Varg me gjatësi fikse karakter (N)
dhe
nchar (N)
Ky lloj ndryshon nga një varg me gjatësi të ndryshueshme në atë që nëse vargu është më pak se N karaktere, atëherë ai gjithmonë mbushet djathtas në gjatësinë e N me hapësira dhe ruhet në bazën e të dhënave në këtë formë, d.m.th. ai zë saktësisht N karaktere në bazën e të dhënave (ku një karakter zë 1 bajt për char dhe 2 bajt për nchar). Në praktikën time ky lloj përdoret shumë rrallë dhe nëse përdoret, atëherë përdoret kryesisht në formatin char (1), d.m.th. kur fusha është e përcaktuar me një karakter.
Numër i plotë ndër Ky lloj na lejon të përdorim vetëm numra të plotë në kolonë, si pozitivë ashtu edhe negativë. Për referencë (tani kjo nuk është aq e rëndësishme për ne) - diapazoni i numrave që lejon lloji int është nga -2 147 483 648 në 2 147 483 647. Zakonisht ky është lloji kryesor që përdoret për të vendosur identifikuesit.
Numër real ose real noton Me fjalë të thjeshta, këta janë numra në të cilët mund të jetë e pranishme një pikë dhjetore (presje).
datë datë Nëse duhet të ruani vetëm datën në kolonën, e cila përbëhet nga tre komponentë: Numri, Muaji dhe Viti. Për shembull, 15.02.2014 (15 shkurt 2014). Ky lloj mund të përdoret për kolonën "Data e pranimit", "Data e lindjes" etj. në rastet kur është e rëndësishme për ne të rregullojmë vetëm datën, ose kur komponenti i kohës nuk është i rëndësishëm për ne dhe mund të hidhet poshtë ose nëse nuk dihet.
Koha koha Ky lloj mund të përdoret nëse vetëm të dhënat kohore duhet të ruhen në një kolonë, d.m.th. Orë, minuta, sekonda dhe milisekonda. Për shembull, 17:38: 31.3231603
Për shembull, e përditshmja "Ora e nisjes së fluturimit".
Data dhe ora ora e datës Ky lloj ju lejon të ruani njëkohësisht datën dhe kohën. Për shembull, 15.02.2014 17:38: 31.323
Për shembull, kjo mund të jetë data dhe ora e një ngjarjeje.
Flamuri pak Ky lloj është i përshtatshëm për ruajtjen e vlerave si "Po" / "Jo", ku "Po" do të ruhet si 1 dhe "Jo" do të ruhet si 0.

Gjithashtu, vlera e fushës, nëse nuk është e ndaluar, mund të mos specifikohet, për këtë qëllim përdoret fjala kyçe NULL.

Për të ekzekutuar shembujt, le të krijojmë një bazë testimi të quajtur Test.

Një bazë të dhënash e thjeshtë (pa specifikuar parametra shtesë) mund të krijohet duke ekzekutuar komandën e mëposhtme:

Testi KRIJO BAZA TË TË DHËNAVE
Mund ta fshini bazën e të dhënave me komandën (duhet të jeni shumë të kujdesshëm me këtë komandë):

Testi DOP DATABASE
Për të kaluar në bazën tonë të të dhënave, mund të ekzekutoni komandën:

Përdorimi i testit
Përndryshe, zgjidhni bazën e të dhënave Test nga lista rënëse në zonën e menysë SSMS. Kur punoj, shpesh përdor këtë metodë të kalimit midis bazave.

Tani në bazën tonë të të dhënave ne mund të krijojmë një tabelë duke përdorur përshkrimet siç janë, duke përdorur hapësira dhe karaktere cirilike:

KRIJO TABELA [Punonjës] ([Numri i personelit] int, [Emri i plotë] nvarchar (30), [Data e lindjes] data, nvarchar (30), [Pozicioni] nvarchar (30), [Departamenti] nvarchar (30))
Në këtë rast, ne duhet t'i vendosim emrat në kllapa katrore [...].

Por në bazën e të dhënave, për lehtësi më të madhe, është më mirë të specifikoni të gjithë emrat e objekteve në alfabetin latin dhe të mos përdorni hapësira në emra. Në MS SQL, zakonisht në këtë rast, secila fjalë fillon me një shkronjë të madhe, për shembull, për fushën "Numri i personelit", mund të vendosim emrin PersonnelNumber. Ju gjithashtu mund të përdorni numra në emër, për shembull, PhoneNumber1.

Në një shënim
Në disa DBMS, formati i mëposhtëm i emërtimit "PHONE_NUMBER" mund të jetë më i preferueshëm, për shembull, ky format përdoret shpesh në ORACLE DB. Natyrisht, kur specifikoni emrin e fushës, është e dëshirueshme që ai të mos përkojë me fjalët kyçe të përdorura në DBMS.

Për këtë arsye, mund të harroni sintaksën e kllapave katrore dhe të fshini tabelën [Punonjësit]:

TABELA E SHQYRTIMIT [Punonjësit]
Për shembull, një tabelë me punonjës mund të quhet "Punonjës" dhe fushat e saj mund të emërohen si më poshtë:

  • ID - Numri i personelit (ID-ja e punonjësit)
  • Emri - emri i plotë
  • Ditëlindja - Data e lindjes
  • Email - E-mail
  • Pozicioni - Pozicioni
  • Departamenti - Departamenti
Shumë shpesh fjala ID përdoret për të emërtuar fushën identifikuese.

Tani le të krijojmë tabelën tonë:

KRIJON TABELA Punonjësit (ID int, Emri nvarchar (30), Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvarchar (30))
Mund të përdorni opsionin NOT NULL për të specifikuar kolonat e kërkuara.

Për një tabelë ekzistuese, fushat mund të ripërcaktohen duke përdorur komandat e mëposhtme:

Përditësimi i fushës ID ALTER TABLE Punonjësit ALTER COLUMN ID int NOT NULL - Përditësimi i fushës së emrit ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar (30) NOT NULL

Në një shënim
Koncepti i përgjithshëm i gjuhës SQL për shumicën e DBMS-ve mbetet i njëjtë (të paktën, unë mund ta gjykoj këtë nga DBMS-të me të cilat kam punuar). Dallimi midis DDL në DBMS të ndryshme qëndron kryesisht në llojet e të dhënave (këtu jo vetëm emrat e tyre mund të ndryshojnë, por edhe detajet e zbatimit të tyre), specifikat e zbatimit të gjuhës SQL gjithashtu mund të ndryshojnë pak (d.m.th., thelbi i komandat janë të njëjta, por mund të ketë dallime të vogla në dialekt, mjerisht, por nuk ka një standard). Duke ditur bazat e SQL, ju lehtë mund të kaloni nga një DBMS në një tjetër, sepse në këtë rast, ju vetëm duhet të kuptoni detajet e zbatimit të komandave në DBMS-në e re, d.m.th. në shumicën e rasteve, mjafton një analogji e thjeshtë.

Krijo tabelën CREATE TABLE Punonjësit (ID int, - në ORACLE, lloji int është ekuivalenti (mbështjellësi) për numrin (38) Emri nvarchar2 (30), - nvarchar2 në ORACLE është ekuivalent me nvarchar në MS SQL Data e ditëlindjes, Email nvarchar23 ) , Pozicioni nvarchar2 (30), Departamenti nvarchar2 (30)); - përditësimi i fushave ID dhe Emri (këtu përdoret MODIFY (…) në vend të ALTER COLUMN) ALTER TABLE Punonjësit MODIFY (ID int NOT NULL, Emri nvarchar2 (30) NOT NULL); - duke shtuar PK (në këtë rast ndërtimi duket si në MS SQL, do të tregohet më poshtë) ALTER TABLE Punonjësit SHTO KUFIZIM PK_Punonjësit PRIMARY KEY (ID);
Për ORACLE, ka dallime në drejtim të zbatimit të llojit varchar2, kodimi i tij varet nga cilësimet e bazës së të dhënave dhe teksti mund të ruhet, për shembull, në kodimin UTF-8. Për më tepër, gjatësia e fushës në ORACLE mund të vendoset si në byte ashtu edhe në karaktere, për këtë përdoren opsione shtesë BYTE dhe CHAR, të cilat specifikohen pas gjatësisë së fushës, për shembull:

EMRI varchar2 (30 BYTE) - kapaciteti i fushës do të jetë 30 bajt EMRI varchar2 (30 CHAR) - kapaciteti i fushës do të jetë 30 karaktere
Cili opsion do të përdoret si parazgjedhje BYTE ose CHAR, në rastin e një treguesi të thjeshtë të llojit varchar2 (30) në ORACLE, varet nga cilësimet e bazës së të dhënave, gjithashtu ndonjëherë mund të vendoset në cilësimet IDE. Në përgjithësi, ndonjëherë mund të jetë e lehtë të ngatërrohesh, prandaj, në rastin e ORACLE, nëse përdoret lloji varchar2 (dhe kjo ndonjëherë justifikohet këtu, për shembull, kur përdor kodimin UTF-8), preferoj të shkruaj në mënyrë eksplicite CHAR (pasi zakonisht është më i përshtatshëm për të lexuar gjatësinë e vargut me karaktere).

Por në këtë rast, nëse tabela përmban tashmë disa të dhëna, atëherë për ekzekutimin e suksesshëm të komandave është e nevojshme që të plotësohen fushat ID dhe Emri në të gjitha rreshtat e tabelës. Le ta demonstrojmë këtë me një shembull, futim të dhëna në tabelë në fushat ID, Pozicioni dhe Departamenti, kjo mund të bëhet me skriptin e mëposhtëm:

INSERT Punonjësit (ID, Pozicioni, Departamenti) VLERAT (1000, N "Drejtor", N "Administrim"), (1001, N "Programues", N "IT"), (1002, N "Kontabilist", N "Kontabilitet" ), (1003, N "Programues i vjetër", N "IT")
Në këtë rast, komanda INSERT do të gjenerojë gjithashtu një gabim, pasi gjatë futjes, ne nuk e kemi specifikuar vlerën e fushës së kërkuar Emri.
Nëse këto të dhëna i kishim tashmë në tabelën origjinale, atëherë komanda "ALTER TABLE Punonjësit ALTER COLUMN ID int NOT NULL" do të kishte përfunduar me sukses dhe komanda "ALTER TABLE Punonjësit ALTER COLUMN Name int NOT NULL" do të kishte gjeneruar një mesazh gabimi. , se ka vlera NULL (të paspecifikuara) në fushën Emri.

Shtoni vlera për fushën Emri dhe plotësoni përsëri të dhënat:


Gjithashtu, opsioni NOT NULL mund të përdoret drejtpërdrejt kur krijoni një tabelë të re, d.m.th. në kontekstin e komandës CREATE TABLE.

Së pari, le të fshijmë tabelën duke përdorur komandën:

TABELA E RREGULLIMIT Punonjësit
Tani le të krijojmë një tabelë me kolonat e detyrueshme ID dhe Emri:

KRIJO TABELËN E Punonjësve (ID int NUK NULL, Emri nvarchar (30) JO NULL, Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvarchar (30))
Ju gjithashtu mund të shkruani NULL pas emrit të kolonës, që do të thotë se vlerat NULL (të paspecifikuara) do të lejohen në të, por kjo nuk është e nevojshme, pasi kjo karakteristikë supozohet si parazgjedhje.

Nëse, përkundrazi, kërkohet që kolona ekzistuese të bëhet opsionale për mbushje, atëherë ne përdorim sintaksën e mëposhtme të komandës:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar (30) NULL
Ose thjesht:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar (30)
Gjithashtu, me këtë komandë, ne mund të ndryshojmë llojin e fushës në një lloj tjetër të pajtueshëm, ose të ndryshojmë gjatësinë e saj. Për shembull, le të zgjerojmë fushën Emri në 50 karaktere:

ALTER TABLE Punonjësit ALTER COLUMN Emri nvarchar (50)

Çelesi primar

Kur krijoni një tabelë, është e dëshirueshme që ajo të ketë një kolonë unike ose një grup kolonash që është unike për secilën prej rreshtave të saj - një rekord mund të identifikohet në mënyrë unike nga kjo vlerë unike. Kjo vlerë quhet çelësi kryesor i tabelës. Për tabelën tonë të punonjësve, një vlerë e tillë unike mund të jetë kolona ID (e cila përmban "Numrin e personelit të punonjësit" - edhe nëse në rastin tonë kjo vlerë është unike për çdo punonjës dhe nuk mund të përsëritet).

Ju mund të krijoni një çelës primar për një tabelë ekzistuese duke përdorur komandën:

ALTER TABLE Punonjësit SHTO KUFIZIM PK_Punonjësit ÇELËSI PRIMAR (ID)
Ku "PK_Employees" është emri i kufizimit përgjegjës për çelësin primar. Në mënyrë tipike, prefiksi "PK_" përdoret për të emërtuar çelësin kryesor, i ndjekur nga emri i tabelës.

Nëse çelësi kryesor përbëhet nga disa fusha, atëherë këto fusha duhet të renditen në kllapa, të ndara me presje:

Ndrysho emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin ÇELËSI KRYESOR (fusha1, fusha 2, ...)
Vlen të theksohet se në MS SQL, të gjitha fushat që përfshihen në çelësin primar duhet të jenë NOT NULL.

Gjithashtu, çelësi primar mund të përcaktohet drejtpërdrejt gjatë krijimit të tabelës, d.m.th. në kontekstin e komandës CREATE TABLE. Le ta fshijmë tabelën:

TABELA E RREGULLIMIT Punonjësit
Dhe pastaj le ta krijojmë atë duke përdorur sintaksën e mëposhtme:

KRIJON TABELA Punonjësit (ID int NOT NULL, Emri nvarchar (30) JO NULL, Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvarchar (30), KUFIZIMI PK_Punonjësit ÇELËSI KRYESOR (ID) - përshkruani fushat si kufizim)
Pas krijimit, plotësoni të dhënat në tabelë:

INSERT Punonjësit (ID, Pozicioni, Departamenti, Emri) VLERAT (1000, N "Drejtor", N "Administrim", N "Ivanov I.I."), (1001, N "Programues", N "IT", N " Petrov PP " ), (1002, N" Kontabilist ", N" Kontabilitet ", N" Sidorov SS "), (1003, N" Programues i lartë ", N" IT ", N" Andreev A. A.")
Nëse çelësi kryesor në tabelë përbëhet nga vetëm vlerat e një kolone, atëherë mund të përdoret sintaksa e mëposhtme:

KRIJO TABELE Punonjës (ID int NUK NULL KUFIZIM PK_Punonjësit ÇELËSI PRIMAR, - specifiko si karakteristikë të fushës Emri nvarchar (30) NUK NULL, Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvar (30))
Në fakt, emri i kufizimit nuk duhet të vendoset, në të cilin rast do t'i caktohet një emër sistemi (si "PK__Employee__3214EC278DA42077"):

KRIJO TABELËN E Punonjësve (ID int NOT NULL, Emri nvarchar (30) JO NULL, Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvarchar (30), ÇELËSI PRIMAR (ID)
Ose:

KRIJO TABELETË Punonjësit (ID int NOT NULL ÇELËSI PRIMAR, Emri nvarchar (30) JO NULL, Data e ditëlindjes, Email nvarchar (30), Pozicioni nvarchar (30), Departamenti nvarchar (30))
Por unë do të rekomandoja gjithmonë të specifikoni në mënyrë eksplicite emrin e kufizimit për tabelat e vazhdueshme, pasi me një emër të dhënë në mënyrë të qartë dhe të kuptueshme, më pas do të jetë më e lehtë për ta manipuluar atë, për shembull, mund ta fshini:

ALTER TABLE Punonjësit HIQET KUFIZIMIN PK_Punonjësit
Por një sintaksë kaq e shkurtër, pa specifikuar emrat e kufizimeve, është e përshtatshme për t'u përdorur kur krijoni tabela të përkohshme të bazës së të dhënave (emri i tabelës së përkohshme fillon me # ose ##), të cilat do të fshihen pas përdorimit.

Le të përmbledhim

Deri më tani kemi mbuluar komandat e mëposhtme:
  • KRIJONI TABELA emri_tabela (numërimi i fushave dhe llojet e tyre, kufizimet) - përdoret për të krijuar një tabelë të re në bazën aktuale të të dhënave;
  • TABELA E RËZIMIT emri_tabela - shërben për të fshirë një tabelë nga baza aktuale e të dhënave;
  • TABELA ALTER emri_tabele KOLONA ALTER kolona_emri… - përdoret për të përditësuar llojin e një kolone ose për të ndryshuar cilësimet e saj (për shembull, për të specifikuar karakteristikën NULL ose NOT NULL);
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri_kufizues ÇELESI PRIMAR(fusha1, fusha2, ...) - shtimi i një çelësi primar në një tabelë ekzistuese;
  • TABELA ALTER emri_tabele KUFIZIMI I RËZIMIT constraint_name - heq kufizimin nga tabela.

Pak për tavolinat e përkohshme

Fragment nga MSDN. Ekzistojnë dy lloje tabelash të përkohshme në MS SQL Server: lokale (#) dhe globale (##). Tabelat e përkohshme lokale janë të dukshme vetëm për krijuesit e tyre derisa të përfundojë lidhja me shembullin e SQL Server, sapo të krijohen për herë të parë. Tabelat e përkohshme lokale hiqen automatikisht pasi një përdorues shkëputet nga një shembull i SQL Server. Tabelat e përkohshme globale janë të dukshme për të gjithë përdoruesit gjatë çdo sesioni lidhjeje pas krijimit të këtyre tabelave dhe hiqen kur të gjithë përdoruesit që u referohen këtyre tabelave shkëputen nga shembulli i SQL Server.

Tabelat e përkohshme krijohen në bazën e të dhënave të sistemit tempdb, d.m.th. Duke i krijuar ato, ne nuk e hedhim plehra bazën kryesore, përndryshe tabelat e përkohshme janë plotësisht identike me tabelat e zakonshme, ato gjithashtu mund të hidhen duke përdorur komandën DROP TABLE. Tabelat e përkohshme lokale (#) përdoren më shpesh.

Ju mund të përdorni komandën CREATE TABLE për të krijuar një tabelë të përkohshme:

KRIJO TABELA #Temp (ID int, Emri nvarchar (30))
Meqenëse një tabelë e përkohshme në MS SQL është e ngjashme me një tabelë të rregullt, ju gjithashtu mund ta hiqni atë vetë me komandën DROP TABLE:

TABELA E REZIMIT #Temp

Gjithashtu, një tabelë e përkohshme (si vetë një tabelë e rregullt) mund të krijohet dhe të plotësohet menjëherë me të dhëna të kthyera nga një pyetje duke përdorur sintaksën SELECT ... INTO:

SELECT ID, Emri INTO #Temp FROM Punonjësit

Në një shënim
Zbatimi i tabelave të përkohshme mund të ndryshojë në DBMS të ndryshme. Për shembull, në ORACLE dhe Firebird DBMS, struktura e tabelave të përkohshme duhet të përcaktohet paraprakisht me komandën CREATE GLOBAL TEMPORARY TABLE që tregon specifikat e ruajtjes së të dhënave në të, më pas përdoruesi e sheh atë midis tabelave kryesore dhe punon me të si me një tavolinë të rregullt.

Normalizimi i bazës së të dhënave - ndarja në nëntabela (libra referencë) dhe përcaktimi i marrëdhënieve

Tabela jonë aktuale e punonjësve ka disavantazhin që në fushat Pozicioni dhe Departamenti, përdoruesi mund të fusë çdo tekst, i cili kryesisht është i mbushur me gabime, pasi një punonjës thjesht mund të specifikojë "IT" si departament, dhe një punonjës i dytë, për shembull, shkruani "Departamenti IT", në të tretën "IT". Si rezultat, do të jetë e paqartë se çfarë do të thoshte përdoruesi, d.m.th. A janë këta punonjës punonjës të të njëjtit departament, apo përdoruesi është përshkruar vetë dhe këto janë 3 departamente të ndryshme? Për më tepër, në këtë rast, ne nuk do të jemi në gjendje të grupojmë saktë të dhënat për ndonjë raport, ku mund të kërkohet të tregohet numri i punonjësve në kontekstin e secilit departament.

Disavantazhi i dytë është sasia e ruajtjes së këtij informacioni dhe dyfishimi i tij, d.m.th. për çdo punonjës, tregohet emri i plotë i departamentit, i cili kërkon hapësirë ​​në bazën e të dhënave për të ruajtur çdo karakter nga emri i departamentit.

E meta e tretë është kompleksiteti i përditësimit të këtyre fushave nëse titulli i një pozicioni ndryshon, për shembull, nëse duhet të riemërtoni pozicionin "Programues" në "Programues i ri". Në këtë rast, do të duhet të bëjmë ndryshime në çdo rresht të tabelës, në të cilën Pozicioni është i barabartë me "Programues".

Për të shmangur këto mangësi, aplikohet i ashtuquajturi normalizim i bazës së të dhënave - duke e ndarë atë në nëntabela, tabela referuese. Nuk është e nevojshme të futemi në xhunglën e teorisë dhe të studiojmë se cilat janë format normale, mjafton të kuptojmë thelbin e normalizimit.

Le të krijojmë 2 tabela "Pozicionet" dhe "Departamentet", e para do të quhet Pozicione, dhe e dyta, përkatësisht, Departamente:

KRIJO POZICIONET E TABELËS (ID int IDENTITY (1,1) NOT NULL KUFIZIM PK_Pozicionet ÇELËSI PRIMAR, Emri nvarchar (30) NOT NULL) KRIJO TABELARE Departamente (ID int IDENTITY (1,1) JO NULL KUSHTET NUK KUNSTRAINT PK3MARYnEY, ) JO NULL)
Vini re se këtu kemi përdorur opsionin e ri IDENTITY, i cili thotë se të dhënat në kolonën ID do të numërohen automatikisht, duke filluar nga 1, me hapin 1, d.m.th. kur shtoni rekorde të reja, atyre do t'u caktohen vlerat 1, 2, 3, etj. Fusha të tilla zakonisht quhen si rritje automatike. Vetëm një fushë me veçorinë IDENTITY mund të përcaktohet në një tabelë dhe zakonisht, por jo domosdoshmërisht, një fushë e tillë është çelësi kryesor për atë tabelë.

Në një shënim
Në DBMS të ndryshme, zbatimi i fushave me një numërues mund të bëhet në mënyrën e tyre. Në MySQL, për shembull, një fushë e tillë përcaktohet duke përdorur opsionin AUTO_INCREMENT. Në ORACLE dhe Firebird më herët ky funksion mund të imitohej duke përdorur SEQUENCE. Por me sa di unë, ORACLE tani ka shtuar opsionin GENERATED AS IDENTITY.

Le t'i plotësojmë këto tabela automatikisht bazuar në të dhënat aktuale të regjistruara në fushat e Pozicionit dhe Departamentit të tabelës së Punonjësve:

Plotësoni fushën "Emri" të tabelës "Pozicionet" me vlera unike nga fusha "Pozicioni" i tabelës "Punonjësit".
Le të bëjmë të njëjtën gjë për tabelën e Departamenteve:

INSERT Departamentet (Emri) ZGJIDH Departamentin e dallueshëm NGA Punonjësit KU Departamenti NUK ËSHTË NULL
Nëse tani hapim tabelat Pozicionet dhe Departamentet, do të shohim një grup vlerash të numëruara për fushën ID:

SELECT * NGA Pozicionet

ZGJIDH * NGA Departamentet

Këto tabela tani do të luajnë rolin e librave referues për caktimin e pozicioneve dhe departamenteve. Tani do t'i referohemi ID-ve të punës dhe departamenteve. Para së gjithash, le të krijojmë fusha të reja në tabelën Punonjësit për të ruajtur të dhënat e identifikuesit:

Shtoni një fushë për pozicionin ID ALTER TABLE Punonjësit ADD PositionID int - shtoni një fushë për ID-në e departamentit ALTER TABLE Punonjësit ADD DepartamentiID int
Lloji i fushave të referencës duhet të jetë i njëjtë si në referencat, në këtë rast është int.

Ju gjithashtu mund të shtoni disa fusha në tabelë menjëherë me një komandë, duke renditur fushat e ndara me presje:

ALTER TABLE Punonjësit ADD PositionID int, DepartmentID int
Tani do të shkruajmë lidhje (kufizimet e referencës - ÇELËSI I HUAJ) për këto fusha në mënyrë që përdoruesi të mos jetë në gjendje të shkruajë në këto fusha vlerat që mungojnë midis vlerave të ID-së që gjenden në librat e referencës.

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_PositionID ÇELËSI I HUAJ (PositionID) REFERENCAT Pozicionet (ID)
Dhe ne do të bëjmë të njëjtën gjë për fushën e dytë:

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_DepartmentID ÇELËSI I HUAJ (ID Departamenti) REFERENCAT Departamentet (ID)
Tani përdoruesi do të jetë në gjendje të fusë vetëm vlerat e ID-së nga drejtoria përkatëse në këto fusha. Prandaj, për të përdorur një departament ose pozicion të ri, ai së pari do të duhet të shtojë një rekord të ri në drejtorinë përkatëse. Sepse pozicionet dhe departamentet tani ruhen në drejtori në një kopje të vetme, pastaj për të ndryshuar emrin, mjafton ta ndryshoni atë vetëm në drejtori.

Emri i kufizimit të referencës është zakonisht i përbërë, përbëhet nga parashtesa "FK_", më pas vijon emri i tabelës dhe pas nënvizimit është emri i fushës që i referohet identifikuesit të tabelës së referencës.

Identifikuesi (ID) është zakonisht një vlerë e brendshme që përdoret vetëm për lidhjet dhe ajo vlerë që ruhet atje është, në shumicën e rasteve, absolutisht indiferente, kështu që nuk keni nevojë të përpiqeni të hiqni qafe vrimat në sekuencën e numrave që lindin gjatë rrjedhës së punës me tabelën, për shembull, pas fshirjes së të dhënave nga libri i referencës.

NDRYSHO TABELA E TABELAVE SHTO KUFIZIM KUFIZIM_emër ÇELËSI I HUAJ (fusha1, fusha2, ...) REFERENCAT tabela_referenciale (fusha1, fusha2, ...)
Në këtë rast, në tabelën "dir_table", çelësi primar përfaqësohet nga një kombinim i disa fushave (fusha1, fusha2, ...).

Në fakt, tani le të përditësojmë fushat PositionID dhe DepartmentID me vlerat e ID nga drejtoritë. Le të përdorim komandën DML UPDATE për këtë qëllim:

UPDATE e SET ID Position = (SELECT ID FROM Positions WHERE Name = e.Position), DepartmentID = (SELECT ID FROM Departments WHERE Emri = e.Departament) FROM Employees e
Le të shohim se çfarë ndodhi duke ekzekutuar pyetjen:

SELECT * NGA Punonjësit

Kjo është e gjitha, fushat PositionID dhe DepartmentID plotësohen që korrespondojnë me pozicionet dhe departamentet me identifikues, nuk ka nevojë për fushat e Pozicionit dhe Departamentit në tabelën e Punonjësve, mund t'i fshini këto fusha:

ALTER TABLE Punonjësit DOP KOLONA Pozicioni, Departamenti
Tani tabela ka marrë formën e mëposhtme:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit
1000 Ivanov I.I. I PAVLEFSHËM I PAVLEFSHËM 2 1
1001 Petrov P.P. I PAVLEFSHËM I PAVLEFSHËM 3 3
1002 Sidorov S.S. I PAVLEFSHËM I PAVLEFSHËM 1 2
1003 Andreev A.A. I PAVLEFSHËM I PAVLEFSHËM 4 3

ato. si rezultat, ne kemi hequr qafe ruajtjen e informacionit të tepërt. Tani, nga pozicioni dhe numrat e departamenteve, ne mund të përcaktojmë në mënyrë unike emrat e tyre duke përdorur vlerat në tabelat e referencës:

SELECT e.ID, e.Name, p.Name PositionName, d.Emri DepartmentEmri FROM Employees e LEFT JOIN Departamentet d ON d.ID = e.DepartmentID LEFT JOIN Pozicionet p ON p.ID = e.PositionID

Në inspektorin e objekteve, ne mund të shohim të gjitha objektet e krijuara për këtë tabelë. Nga këtu, mund të kryeni manipulime të ndryshme me këto objekte - për shembull, riemërtoni ose fshini objektet.

Vlen gjithashtu të theksohet se tabela mund t'i referohet vetvetes, d.m.th. ju mund të krijoni një lidhje rekursive. Për shembull, le të shtojmë një fushë tjetër ManagerID në tabelën tonë me punonjës, e cila do t'i tregojë punonjësit të cilit ky punonjës është në vartësi. Le të krijojmë një fushë:

ALTER TABLE Punonjësit ADD ManagerID int
NULL lejohet në këtë fushë, fusha do të jetë bosh nëse, për shembull, nuk ka eprorë mbi punonjësin.

Tani le të krijojmë një ÇELËS TË HUAJ në tabelën e Punonjësve:

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_ManagerID ÇELËSI I HUAJ (Menaxheri ID) REFERENCAT Punonjësit (ID)
Le të krijojmë një diagram dhe të shohim se si duken marrëdhëniet midis tabelave tona në të:

Si rezultat, ne duhet të shohim foton e mëposhtme (tabela e punonjësve është e lidhur me tabelat e pozicioneve dhe departamenteve, dhe gjithashtu i referohet vetes):

Së fundi, duhet thënë se çelësat e referencës mund të përfshijnë opsione shtesë ON DELETE CASCADE dhe ON UPDATE CASCADE, të cilat tregojnë se si të silleni kur fshini ose përditësoni një rekord që është referuar në tabelën e referencës. Nëse këto opsione nuk janë të specifikuara, atëherë nuk mund të ndryshojmë ID-në në tabelën e referencës për rekordin për të cilin ka lidhje nga një tabelë tjetër, gjithashtu nuk do të jemi në gjendje ta fshijmë një regjistrim të tillë nga referenca derisa të fshijmë të gjitha rreshtat që i referohen këtë rekord, ose, ne do të përditësojmë lidhjet në këto rreshta me një vlerë të ndryshme.

Për shembull, le të rikrijojmë tabelën me opsionin ON DELETE CASCADE për FK_Employees_DepartmentID:

DROP TABLE Punonjësit CREATE TABLE Punonjësit (ID int NOT NULL, Emri nvarchar (30), Data e ditëlindjes, Email nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Punonjësit KRYESOR KRYESOR (IDK_Deployees KEY (IDK_DeployNID) ) REFERENCAT Departamentet (ID) MBI FSHIJEN KASCADE, KUFIZUAR FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCAT Pozicionet (ID), KUFIZUAR FK_Employees_ManagerID FOREIGN KEY (Menaxheri ID) REFEREIDES, (10 Menaxheri) Pozicionet REFEREIDES" "19550219", 2,1, NULL), (1001, N "Petrov PP", "19831203", 3,3,1003), (1002 , N "Sidorov SS", "19760607", 1,2,1000) , (1003, N "Andreev AA", "19820417", 4,3,1000)
Le të fshijmë departamentin me ID 3 nga tabela e Departamenteve:

FSHI Departamentet KU ID = 3
Le të shohim të dhënat në tabelën e punonjësve:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit ID-ja e menaxherit
1000 Ivanov I.I. 1955-02-19 I PAVLEFSHËM 2 1 I PAVLEFSHËM
1002 Sidorov S.S. 1976-06-07 I PAVLEFSHËM 1 2 1000

Siç mund ta shihni, të dhënat për departamentin 3 gjithashtu janë fshirë nga tabela e punonjësve.

Opsioni ON UPDATE CASCADE sillet në mënyrë të ngjashme, por funksionon kur vlera e ID-së në kërkim përditësohet. Për shembull, nëse ndryshojmë ID-në e pozicionit në drejtorinë e punës, atëherë ID-ja e Departamentit në tabelën Punonjësit do të përditësohet në vlerën e re të ID-së që kemi specifikuar në drejtori. Por në këtë rast thjesht nuk do të jetë e mundur të demonstrohet kjo, pasi kolona ID në tabelën Departamentet ka opsionin IDENTITY, i cili nuk do të na lejojë të ekzekutojmë kërkesën e mëposhtme (ndryshojmë ID-në e departamentit 3 në 30):

PËRDITËSONI SET ID-në e departamenteve = 30 KU ID = 3
Gjëja kryesore është të kuptoni thelbin e këtyre 2 opsioneve ON DELETE CASCADE dhe ON UPDATE CASCADE. Unë i përdor këto opsione në raste shumë të rralla dhe ju rekomandoj që të mendoni me kujdes përpara se t'i përdorni ato në një kufizim referimi. nëse fshini aksidentalisht një rekord nga tabela e kërkimit, kjo mund të çojë në probleme të mëdha dhe të krijojë një reaksion zinxhir.

Le të rivendosim departamentin 3:

Jepni leje për të shtuar/ndryshuar vlerën e IDENTITY SET IDENTITY_INSERT Departamentet ON INSERT Departamentet (ID, Emri) VLERAT (3, N "IT") - ndaloni shtimin / ndryshimin e vlerës së IDENTITY SET IDENTITY_INSERT Departamentet OFF
Le të pastrojmë plotësisht tabelën e punonjësve duke përdorur komandën TRUNCATE TABLE:

TRUNCATE TABELË Punonjësit
Dhe përsëri, ringarkoni të dhënat në të duke përdorur komandën e mëparshme INSERT:

INSERT Punonjësit (ID, Emri, Ditëlindja, Pozicioni ID, ID Departamenti, ID Menaxheri) VALUES (1000, N "Ivanov I.I.", "19550219", 2,1, NULL), (1001, N "Petrov P.P." , "19831203", 3 ,3,1003), (1002, N "Sidorov SS", "19760607", 1,2,1000), (1003, N "Andreev AA", "19820417" , 4,3,1000)

Le të përmbledhim

Për momentin, disa komanda të tjera DDL janë shtuar në njohuritë tona:
  • Shtimi i vetive IDENTITY në një fushë - ju mundëson që kjo fushë të plotësohet automatikisht (fusha numërues) për tabelën;
  • TABELA ALTER emri_tabele SHTO lista_e_fushave_me_karakteristika - ju lejon të shtoni fusha të reja në tabelë;
  • TABELA ALTER emri_tabele KOLONA E RËZIMIT list_of_field - ju lejon të fshini fushat nga tabela;
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri_kufizues ÇELËSI I HUAJ(fushat) REFERENCAT referencë_tabela (fushat) - ju lejon të përcaktoni marrëdhëniet midis tabelës dhe tabelës së referencës.

Kufizime të tjera - UNIK, I PARALAKTUAR, KONTROLLO

Me kufizimin UNIQUE, mund të thoni se vlerat për çdo rresht në një fushë të caktuar ose grup fushash duhet të jenë unike. Në rastin e tabelës Employees, ne mund të vendosim një kufizim të tillë në fushën Email. Thjesht plotësoni paraprakisht Email-in me vlera, nëse ato nuk janë përcaktuar tashmë:

Përditëso punonjësit SET Email = " [email i mbrojtur]"WHERE ID = 1000 UPDATE Punonjësit SET Email =" [email i mbrojtur]"WHERE ID = 1001 UPDATE Punonjësit SET Email =" [email i mbrojtur]"WHERE ID = 1002 UPDATE Punonjësit SET Email =" [email i mbrojtur]"KU ID = 1003
Dhe tani ju mund të vendosni një kufizim unikal në këtë fushë:

ALTER TABLE Punonjësit SHTO KUFIZIM UQ_Employees_Email UNIQUE (Email)
Tani përdoruesi nuk do të jetë në gjendje të fusë të njëjtin E-Mail për disa punonjës.

Kufizimi i unike zakonisht emërtohet si më poshtë - fillimisht vjen parashtesa "UQ_", pastaj emri i tabelës dhe pas nënvizimit është emri i fushës në të cilën zbatohet ky kufizim.

Prandaj, nëse një kombinim i fushave duhet të jetë unik në kontekstin e rreshtave të tabelës, atëherë ne i rendisim ato të ndara me presje:

NDRYSHO emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin UNIK (fusha1, fusha 2, ...)
Duke shtuar një kufizim DEFAULT në fushë, ne mund të vendosim një vlerë të paracaktuar që do të zëvendësohet nëse, kur futni një rekord të ri, kjo fushë nuk është e listuar në listën e fushave të komandës INSERT. Ky kufizim mund të vendoset drejtpërdrejt kur krijoni një tabelë.

Le të shtojmë një fushë të re Data e takimit në tabelën e Punonjësve dhe ta emërtojmë HireDate dhe të themi se vlera e paracaktuar për këtë fushë është data aktuale:

ALTER TABLE Punonjësit SHTO Data e punësimit NUK NULL DEFAULT SYSDATETIME ()
Ose nëse kolona HireDate ekziston tashmë, atëherë mund të përdoret sintaksa e mëposhtme:

ALTER TABLE Punonjësit SHTO SYSDATETIME DEFAULT () FOR HireDate
Këtu nuk e specifikova emrin e kufizimit, pasi në rastin e DEFAULT-it, unë isha i mendimit se kjo nuk është aq kritike. Por nëse e bën në mënyrë miqësore, atëherë, mendoj, nuk duhet të jesh dembel dhe duhet të vendosësh një emër normal. Kjo bëhet si më poshtë:

ALTER TABLE Punonjësit SHTO KUFIZIM DF_Employees_HireDate DEFAULT SYSDATETIME () FOR HireDate
Meqenëse kjo kolonë nuk ekzistonte më parë, kur të shtohet në çdo regjistrim, vlera e datës aktuale do të futet në fushën HireDate.

Kur shtoni një rekord të ri, data aktuale do të futet gjithashtu automatikisht, natyrisht, nëse nuk e vendosim në mënyrë të qartë, d.m.th. nuk do të specifikohet në listën e kolonave. Le ta tregojmë këtë me një shembull pa specifikuar fushën HireDate në listën e vlerave të shtuara:

INSERT Punonjësit (ID, Emri, Email) VALUES (1004, N "Sergeev S.S.", " [email i mbrojtur]")
Le të shohim se çfarë ndodhi:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit ID-ja e menaxherit Data e punësimit
1000 Ivanov I.I. 1955-02-19 [email i mbrojtur] 2 1 I PAVLEFSHËM 2015-04-08
1001 Petrov P.P. 1983-12-03 [email i mbrojtur] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email i mbrojtur] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [email i mbrojtur] 4 3 1000 2015-04-08
1004 Sergeev S.S. I PAVLEFSHËM [email i mbrojtur] I PAVLEFSHËM I PAVLEFSHËM I PAVLEFSHËM 2015-04-08

Kufizimi CHECK përdoret kur është e nevojshme të kontrollohen vlerat e futura në fushë. Për shembull, le të vendosim këtë kufizim në fushën e numrit të personelit, që është identifikuesi (ID) i punonjësit. Duke përdorur këtë kufizim, le të themi se numrat e personelit duhet të kenë një vlerë midis 1000 dhe 1999:

ALTER TABLE Punonjësit SHTO KUFIZIM CK_Employees_ID CHECK (ID MES 1000 DHE 1999)
Kufizimi zakonisht emërtohet i njëjtë, fillimisht vjen parashtesa "CK_", pastaj emri i tabelës dhe emri i fushës në të cilën vendoset ky kufizim.

Le të përpiqemi të fusim një hyrje të pavlefshme për të kontrolluar nëse kufizimi po funksionon (duhet të marrim gabimin përkatës):

INSERT Punonjësit (ID, Email) VALUES (2000, " [email i mbrojtur]")
Tani le të ndryshojmë vlerën e futur në 1500 dhe të sigurohemi që rekordi të jetë futur:

INSERT Punonjësit (ID, Email) VALUES (1500, " [email i mbrojtur]")
Ju gjithashtu mund të krijoni kufizime UNIK dhe CHECK pa specifikuar një emër:

Punonjësit e ALTER TABLE SHTO UNIK (Email) ALTER TABLE Punonjësit SHTO KONTROLLI (ID MES 1000 DHE 1999)
Por kjo nuk është një praktikë e mirë dhe është më mirë të specifikohet emri i kufizimit në mënyrë eksplicite, pasi për ta kuptuar më vonë, gjë që do të jetë më e vështirë, do t'ju duhet të hapni objektin dhe të shihni se për çfarë është përgjegjës.

Me një emër të mirë, shumë informacione rreth kufizimit mund të njihen drejtpërdrejt nga emri i tij.

Dhe, në përputhje me rrethanat, të gjitha këto kufizime mund të krijohen menjëherë kur krijoni një tabelë, nëse ajo nuk ekziston tashmë. Le ta fshijmë tabelën:

TABELA E RREGULLIMIT Punonjësit
Dhe ne do ta rikrijojmë atë me të gjitha kufizimet e krijuara me një komandë CREATE TABLE:

KRIJO TABELË E Punonjësve (ID int NOT NULL, Emri nvarchar (30), Data e ditëlindjes, Email nvarchar (30), PositionID int, DepartmentID int, DataDate e punësimit NOT NULL DEFAULT SYSDATETIME (), - për DEFAULT do të hedh CONSTRAINTEmployees PPK (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENCAT Departamentet (ID), CONSTRAINT FK_Employees_PositionID ÇELËSI I HUAJ (PositionID) REFERENCAT Pozicionet (ID), CONSTRAINT UQ_EmployeesQUEE)

INSERT Punonjësit (ID, Emri, Ditëlindja, Email, Pozicioni ID, Departamenti ID) VLERAT (1000, N "Ivanov I.I.", "19550219", " [email i mbrojtur]", 2,1), (1001, N" Petrov P.P. "," 19831203 "," [email i mbrojtur]", 3,3), (1002, N" Sidorov S.S. "," 19760607 "," [email i mbrojtur]", 1,2), (1003, N" Andreev A.A. "," 19820417 "," [email i mbrojtur]",4,3)

Pak rreth indekseve të krijuara gjatë krijimit të kufizimeve PRIMARY KEY dhe UNIQUE

Siç mund ta shihni në pamjen e mësipërme, kur krijohen kufizimet PRIMARY KEY dhe UNIQUE, indekset me të njëjtët emra (PK_Employees dhe UQ_Employees_Email) u krijuan automatikisht. Si parazgjedhje, indeksi për çelësin primar krijohet si TË GRUPTUAR, dhe për të gjithë indekset e tjera si NONCLUSTERED. Duhet thënë se jo të gjitha DBMS kanë konceptin e një indeksi të grupuar. Një tabelë mund të ketë vetëm një indeks të GRUPTUAR. TË GRUPTUAR - do të thotë që të dhënat e tabelës do të renditen sipas këtij indeksi, gjithashtu mund të thuash që ky indeks ka qasje të drejtpërdrejtë në të gjitha të dhënat e tabelës. Ky është indeksi kryesor i tabelës, si të thuash. Më përafërsisht, është një indeks i ngjitur në tabelë. Indeksi i grupuar është një mjet shumë i fuqishëm që mund t'ju ndihmojë të optimizoni pyetjet tuaja, thjesht mbani në mend këtë për momentin. Nëse duam t'i themi indeksit të grupuar që të përdoret jo në çelësin primar, por për një indeks tjetër, atëherë kur krijojmë çelësin primar, duhet të specifikojmë opsionin NONCLUSTERED:

Ndrysho emrin e tabelës TABELA_SHTO SHTO KUFIZIM kufizimin_emrin ÇELËSI PRIMAR TË JO GJITHËSHTARË (fusha1, fusha 2, ...)
Për shembull, le ta bëjmë indeksin e kufizimit PK_Employees jo të grupuar dhe indeksin e kufizimit UQ_Employees_Email të grumbulluar. Para së gjithash, ne do të heqim këto kufizime:

ALTER TABLE Punonjësit LËSHIEN KUFIZIMIN PK_Punonjësit ALTER TABLE Punonjësit LËSHIEN KUFIZIMIN UQ_Employees_Email
Tani le t'i krijojmë ato me opsionet E GRUPTUAR dhe JO CLUSTERED:

Punonjësit e ALTER TABLE SHTO KUFIZIM PK_Punonjësit ÇELËSI KRYESOR JO GJENDJE (ID) ALTER TABLE Punonjësit SHTO KUFIZIM UQ_Employees_Email UNIQUE CLUSTERED (Email)
Tani, pas marrjes nga tabela Employees, mund të shohim se të dhënat janë renditur sipas indeksit të grupuar UQ_Employees_Email:

SELECT * NGA Punonjësit

ID Emri ditëlindjen Email ID e pozicionit ID e Departamentit Data e punësimit
1003 Andreev A.A. 1982-04-17 [email i mbrojtur] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [email i mbrojtur] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [email i mbrojtur] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email i mbrojtur] 1 2 2015-04-08

Para kësaj, kur indeksi PK_Employees ishte indeksi i grupuar, të dhënat u renditën sipas ID-së si parazgjedhje.

Por në këtë rast, ky është vetëm një shembull që tregon thelbin e indeksit të grupuar, pasi ka shumë të ngjarë, pyetjet do t'i bëhen tabelës së Punonjësve nga fusha e ID-së dhe në disa raste, ajo vetë mund të veprojë si një libër referimi.

Për kërkime, zakonisht këshillohet që indeksi i grupuar të ndërtohet në çelësin primar, pasi në kërkesat, ne shpesh i referohemi një identifikuesi të drejtorisë për të marrë, për shembull, emrin (Pozicioni, Departamenti). Këtu kujtojmë atë që shkrova më lart, se indeksi i grupuar ka qasje të drejtpërdrejtë në rreshtat e tabelës, dhe nga kjo rrjedh se mund të marrim vlerën e çdo kolone pa shpenzime shtesë.

Është e dobishme të aplikohet një indeks i grupuar në fushat e mostrave më të shpeshta.

Ndonjëherë një çelës krijohet në tabela nga një fushë zëvendësuese, në të cilin rast është e dobishme të ruani opsionin e indeksit CLUSTERED për një indeks më të përshtatshëm dhe të specifikoni opsionin NONCLUSTERED kur krijoni një çelës primar zëvendësues.

Le të përmbledhim

Në këtë fazë, ne u njohëm me të gjitha llojet e kufizimeve, në formën e tyre më të thjeshtë, të cilat krijohen nga një komandë e formës "ALTER TABLE tabela_emri SHTO CONSTRAINT constraint_name...":
  • ÇELESI PRIMAR- çelesi primar;
  • ÇELËSI I HUAJ- vendosja e lidhjeve dhe kontrolli i integritetit referencial të të dhënave;
  • UNIK- ju lejon të krijoni unike;
  • KONTROLLO- lejon korrektësinë e të dhënave të futura;
  • PARALAKTUAR- ju lejon të vendosni vlerën e paracaktuar;
  • Vlen gjithashtu të përmendet se të gjitha kufizimet mund të hiqen duke përdorur komandën " TABELA ALTER emri_tabele KUFIZIMI I RËZIMIT emri_kufizues ".
Ne gjithashtu prekëm pjesërisht temën e indekseve dhe analizuam konceptin e grupimit ( TË GRUPTUARA) dhe jo të grumbulluara ( PA KONTROLLER) indeksi.

Krijoni indekse të pavarura

Mbështetja te vetja këtu i referohet indekseve që nuk krijohen për një kufizim KRYESOR PRIMAR ose UNIK.

Indekset sipas fushës ose fushave mund të krijohen me komandën e mëposhtme:

KRIJO INDEX IDX_Employees_Name ON Punonjësit (Emri)
Gjithashtu këtu mund të specifikoni opsionet TË GRUPTUARA, TË JO CLUSTERED, UNIQUE, dhe gjithashtu mund të specifikoni drejtimin e renditjes për secilën fushë individuale ASC (sipas parazgjedhjes) ose DESC:

KRIJONI INDEKS UNIK JO TË GJITHSHËM UQ_Employees_EmailDesc ON Punonjësit (Email DESC)
Kur krijoni një indeks jo të grupuar, opsioni NONCLUSTERED mund të lëshohet sepse ai është i paracaktuar, dhe shfaqet këtu thjesht për të treguar pozicionin e opsionit TË RREGULLAR ose JO GJITHA në komandë.

Mund ta fshini indeksin me komandën e mëposhtme:

HIQ INDEX IDX_Employees_Name ON Punonjësit
Indekset e thjeshta, si kufizimet, mund të krijohen në kontekstin e komandës CREATE TABLE.

Për shembull, le ta hedhim përsëri tabelën:

TABELA E RREGULLIMIT Punonjësit
Dhe ne do ta rikrijojmë atë me të gjitha kufizimet dhe indekset e krijuara me një komandë CREATE TABLE:

KRIJO TABLETË Punonjësit (ID int NOT NULL, Emri nvarchar (30), Data e ditëlindjes, Email nvarchar (30), ID e Pozicionit int, ID e Departamentit int, Data e punësimit NUK KUSHTET NULL DF_Employees_HireDate DEFAULT SYSDATETREQIDINTTIME,Menaxheri i Emisionit TIMERINS (Menaxheri) CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENCES Departamentet (ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENCES Pozicionet (ID), CONSTRAINT FK_Employees_NIGHMENAXH (ID) CONSTRAINT FK_Employees_NIGORENjë (ID)
Së fundi, le të fusim punonjësit tanë në tabelë:

INSERT Punonjësit (ID, Emri, Ditëlindja, Email, PositionID, Departamenti ID, ManagerID) VLERAT (1000, N "Ivanov I.I.", "19550219", " [email i mbrojtur]", 2,1, NULL), (1001, N" Petrov P.P. "," 19831203 "," [email i mbrojtur]", 3,3,1003), (1002, N" Sidorov S.S. "," 19760607 "," [email i mbrojtur]", 1,2,1000), (1003, N" Andreev A.A. "," 19820417 "," [email i mbrojtur]",4,3,1000)
Për më tepër, vlen të përmendet se mund të përfshini vlera në një indeks jo të grupuar duke i specifikuar ato në INNCLUDE. ato. në këtë rast, indeksi INCLUDE do të ngjajë disi me një indeks të grumbulluar, vetëm tani indeksi nuk është ngjitur në tabelë, por vlerat e nevojshme janë ngjitur në indeks. Prandaj, indekse të tilla mund të përmirësojnë shumë performancën e pyetjeve të përzgjedhura (SELECT), nëse të gjitha fushat e listuara janë të pranishme në indeks, atëherë mund të mos jetë fare e nevojshme qasja në tabelë. Por kjo natyrisht rrit madhësinë e indeksit, pasi vlerat e fushave të listuara dublikohen në indeks.

Fragment nga MSDN. Sintaksa e përgjithshme e komandës për krijimin e indekseve

KRIJONI [UNIK] [TË GJENDUR | NONCLUSTERED] index_name INDEX AKTIV (kolona [ASC | DESC] [, ... n]) [PERFSHIJ (emri i_kolonës [, ... n])]

Le të përmbledhim

Indekset mund të rrisin shpejtësinë e rikthimit të të dhënave (SELECT), por indekset ngadalësojnë shpejtësinë e modifikimit të të dhënave të tabelës, sepse pas çdo modifikimi, sistemi do të duhet të rindërtojë të gjithë indekset për një tabelë të caktuar.

Këshillohet që në çdo rast të gjendet zgjidhja optimale, mesatarja e artë, në mënyrë që performanca e kampionimit dhe modifikimi i të dhënave të jenë në nivelin e duhur. Strategjia për krijimin e indekseve dhe numri i tyre mund të varet nga shumë faktorë, si për shembull sa shpesh ndryshojnë të dhënat në tabelë.

Përfundim DDL

Siç mund ta shihni, DDL nuk është aq e komplikuar sa mund të duket në shikim të parë. Këtu kam mundur të tregoj pothuajse të gjitha konstruksionet e tij bazë, duke përdorur vetëm tre tabela.

Gjëja kryesore është të kuptojmë thelbin, dhe pjesa tjetër është çështje praktike.

Fat i mirë me këtë gjuhë të mrekullueshme të quajtur SQL.

Mirë se vini në faqen time të blogut. Sot do të flasim për pyetjet sql për fillestarët. Disa webmaster mund të kenë një pyetje. Pse të mësoni sql? Nuk mund ta bësh?

Rezulton se kjo nuk do të jetë e mjaftueshme për të krijuar një projekt profesional në internet. Sql përdoret për të punuar me bazat e të dhënave dhe për të krijuar aplikacione për WordPress. Le të hedhim një vështrim më të afërt se si të përdorim pyetjet.

Cfare eshte

Sql është një gjuhë e strukturuar e pyetjeve. Projektuar për të përcaktuar llojin e të dhënave, për të siguruar akses në to dhe për të përpunuar informacionin në periudha të shkurtra kohore. Ai përshkruan komponentët ose disa lloj rezultatesh që dëshironi të shihni në projektin e Internetit.

Me fjalë të thjeshta, kjo gjuhë programimi ju lejon të shtoni, modifikoni, kërkoni dhe shfaqni informacione në bazën e të dhënave. Popullariteti i mysql është për faktin se përdoret për të krijuar projekte dinamike në internet bazuar në një bazë të dhënash. Prandaj, për të zhvilluar një blog funksional, duhet të mësoni këtë gjuhë.

Çfarë mund të bëjë

Gjuha Sql lejon:

  • krijoni tabela;
  • ndryshoni marrjen dhe ruajtjen e të dhënave të ndryshme;
  • kombinoni informacionin në blloqe;
  • mbrojtja e të dhënave;
  • krijoni kërkesa në akses.

E rëndësishme! Duke u marrë me sql, ju mund të shkruani aplikacione për WordPress të çdo kompleksiteti.

Çfarë strukture

Baza e të dhënave përbëhet nga tabela që mund të përfaqësohen si skedar Excel.

Ajo ka një emër, kolona dhe një rresht me disa informacione. Ju mund të krijoni tabela të tilla duke përdorur pyetje sql.

Çfarë duhet të dini


Pikat kryesore kur mësoni Sql

Siç u përmend më lart, pyetjet përdoren për të përpunuar dhe futur informacione të reja në një bazë të dhënash të përbërë nga tabela. Secila prej rreshtave të saj është një hyrje e veçantë. Pra, le të krijojmë një bazë të dhënash. Për ta bërë këtë, shkruani komandën:

Krijo bazën e të dhënave "bazaname"

Në thonjëza shkruani emrin e bazës së të dhënave në latinisht. Mundohuni të gjeni një emër kuptimplotë për të. Mos krijoni një bazë si "111", "www" dhe të ngjashme.

Pas krijimit të bazës së të dhënave, instaloni:

VENDOSI EMRAT 'utf-8'

Kjo është e nevojshme që përmbajtja në faqe të shfaqet në mënyrë korrekte.

Tani krijojmë një tabelë:

KRIJO TABELA 'bazaname'. 'Tabela' (

id INT (8) NUK NULL ÇELËSI KRYESOR AUTO_INCREMENT,

log VARCHAR (10),

kalojnë VARCHAR (10),

datë DATE

Në rreshtin e dytë, ne kemi shkruar tre atribute. Le të shohim se çfarë nënkuptojnë:

  • Atributi NOT NULL do të thotë që qeliza nuk do të jetë bosh (kjo fushë kërkohet);
  • Vlera AUTO_INCREMENT - plotësim automatik;
  • ÇELËSI PRIMARY është çelësi primar.

Si të shtoni informacion

Për të mbushur me vlera fushat e tabelës së krijuar, përdorni deklaratën INSERT. Ne shkruajmë linjat e mëposhtme të kodit:

FUT NE 'tabela'

(hyrja, kalimi, data) VLERAT

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

Në kllapa, ne tregojmë emrat e kolonave, dhe në tjetrën - vlerat.

E rëndësishme! Vëzhgoni sekuencën e emrave dhe kuptimeve të kolonave.

Si të përditësoni informacionin

Për ta bërë këtë, përdorni komandën UPDATE. Le të shohim se si të ndryshojmë fjalëkalimin për një përdorues specifik. Ne shkruajmë linjat e mëposhtme të kodit:

Përditëso kalimin e SET "Tabela" = "12345678" WHERE id = "1"

Tani ndryshoni fjalëkalimin '12345678'. Ndryshimet bëhen në rreshtin me "id" = 1. Nëse nuk shkruani komandën WHERE, të gjitha rreshtat do të ndryshojnë, jo një specifik.

Unë ju rekomandoj të blini librin " SQL për Dummies ". Me ndihmën e tij, ju do të jeni në gjendje të punoni profesionalisht me bazën e të dhënave hap pas hapi. I gjithë informacioni është i strukturuar nga i thjeshtë në kompleks dhe do të pranohet mirë.

Si të fshini një hyrje

Nëse keni shkruar diçka të gabuar, korrigjoni atë me komandën DELETE. Punon njësoj si UPDATE. Ne shkruajmë kodin e mëposhtëm:

FSHI NGA 'tabela' WHERE id = '1'

Po merr informacion

Për të tërhequr vlerat nga baza e të dhënave, përdorni komandën SELECT. Ne shkruajmë kodin e mëposhtëm:

SELECT * NGA 'tabela' WHERE id = '1'

Në këtë shembull, ne zgjedhim të gjitha fushat e disponueshme në tabelë. Kjo ndodh nëse shkruani një yll "*" në komandë. Nëse keni nevojë të zgjidhni një vlerë të mostrës, ne shkruajmë kështu:

SELECT regjistrin, kaloni nga tabela WHERE id = '1'

Duhet të theksohet se aftësia për të punuar me bazat e të dhënave nuk do të jetë e mjaftueshme. Për të krijuar një projekt profesional në internet, do t'ju duhet të mësoni se si të shtoni të dhëna nga baza e të dhënave në faqe. Për ta bërë këtë, njihuni me gjuhën e programimit në internet php. Kjo do t'ju ndihmojë kurs në klasë nga Mikhail Rusakov .


Hedhja e një tavoline

Ndodh me një kërkesë DROP. Për ta bërë këtë, shkruani rreshtat e mëposhtëm:

tavolinë DOP TABLE;

Nxjerrja e një regjistrimi nga një tabelë sipas një kushti specifik

Konsideroni një kod si ky:

ZGJIDH ID-në, vendin, qytetin FROM tabela WHERE njerëzit> 150000000

Ai do të shfaqë të dhënat e vendeve ku popullsia është mbi njëqind e pesëdhjetë milionë.

Një shoqatë

Është e mundur të lidhni disa tabela së bashku duke përdorur Join. Si funksionon, shikoni këtë video në më shumë detaje:

PHP dhe MySQL

Edhe një herë, dua të theksoj se bërja e pyetjeve kur krijoni një projekt në internet është një gjë e zakonshme. Për t'i përdorur ato në dokumentet php, ndiqni këtë procedurë:

  • Ne lidhemi me bazën e të dhënave duke përdorur komandën mysql_connect ();
  • Duke përdorur mysql_select_db () zgjidhni bazën e të dhënave të kërkuara;
  • Ne e përpunojmë kërkesën duke përdorur mysql_fetch_array ();
  • Ne e mbyllim lidhjen me komandën mysql_close ().

E rëndësishme! Puna me një bazë të dhënash nuk është e vështirë. Gjëja kryesore është të shkruani saktë kërkesën.

Webmasterët fillestarë do të mendojnë. Çfarë të lexoni në këtë temë? Unë do të doja të rekomandoja librin e Martin Graber " SQL për njerëzit e thjeshtë ". Është shkruar në atë mënyrë që çdo gjë do të jetë e qartë për fillestarët. Përdoreni atë si një libër referimi.

Por kjo është teori. Cila është situata në praktikë? Në realitet, një projekt në internet jo vetëm që duhet të krijohet, por edhe të sillet në TOP të Google dhe Yandex. Kursi video " Krijimi dhe promovimi i faqes në internet ».


Video udhëzim

Ende keni pyetje? Shikoni videon online në më shumë detaje.

konkluzioni

Pra, marrja me shkrimin e pyetjeve sql nuk është aq e vështirë sa duket, por çdo webmaster duhet ta bëjë këtë. Kjo do të ndihmojë kurset video të përshkruara më sipër. Abonohuni në grupi im VKontakte të jetë i pari që do të mësojë për shfaqjen e informacionit të ri interesant.

Shumica e aplikacioneve moderne në internet ndërveprojnë me bazat e të dhënave, zakonisht duke përdorur një gjuhë të quajtur SQL. Për fatin tonë, kjo gjuhë është shumë e lehtë për t'u mësuar. Në këtë artikull, ne do të shohim të thjeshta SQL kërkesat dhe mësoni se si t'i përdorni ato për të bashkëvepruar Baza e të dhënave MySQL.

Cfare te nevojitet?

SQL (Gjuha e strukturuar e pyetjeve) një gjuhë e krijuar posaçërisht për të ndërvepruar me sistemet e menaxhimit të bazës së të dhënave si p.sh MySQL, Oracle, Sqlite dhe të tjerët ... Për të kryer SQL kërkesat në këtë artikull, unë ju këshilloj të instaloni MySQL në kompjuterin lokal. Gjithashtu unë rekomandoj përdorimin phpMyAdmin si një ndërfaqe vizuale.

E gjithë kjo është e disponueshme në Denverin e dashur të të gjithëve. Unë mendoj se të gjithë duhet të dinë se çfarë është dhe ku ta marrin :). Mund përndryshe përdorni WAMP ose MAMP.

Denveri ka një të integruar MySQL konsol. Ne do ta përdorim atë.

KRIJON BAZA E TË DHËNAVE:krijimi i bazës së të dhënave

Kjo është kërkesa jonë e parë. Ne do të krijojmë bazën tonë të parë të të dhënave për punë të mëtejshme.

Së pari, hapeni MySQL konsol dhe hyrje. Për WAMP fjalëkalimi i paracaktuar është bosh. Kjo është, asgjë :). Për MAMP është "rrënjë". Për Denverin duhet sqaruar.

Pas hyrjes, futni rreshtin e mëposhtëm dhe klikoni Fut:

KRIJO BAZA E TË DHËNAVE my_first_db;

Vini re se pikëpresja (;) shtohet në fund të pyetjes, ashtu si në gjuhët e tjera.

Shihni gjithashtu komandat në SQL rast i ndjeshëm. I shkruajmë me shkronja të mëdha.

Opsioni vetëm: Komplet personazheshdhe Përmbledhje

Nëse dëshironi të instaloni grupi i karaktereve dhe krahasimi mund të jetë shkruani komandën e mëposhtme:

KRIJO BAZA E TË DHËNAVE my_first_db SET E PARAKTUAR E KARAKTERVE utf8 KOLLATE utf8_general_ci;

Gjen një listë të grupeve të karaktereve që mbështeten në MySQL.

SHQI BAZA E TË DHËNAVE:liston të gjitha bazat e të dhënave

Kjo komandë përdoret për të shfaqur të gjitha bazat e të dhënave të disponueshme.

HIQ BAZA E TË DHËNAVE:fshirja e një baze të dhënash

Ju mund të hiqni një DB ekzistuese duke përdorur këtë pyetje.

Kini kujdes me këtë komandë pasi funksionon pa paralajmërim. Nëse databaza juaj përmban të dhëna, të gjitha do të fshihen.

PËRDORIMI:Zgjedhja e bazës së të dhënave

Teknikisht, ky nuk është një pyetje, por një operator dhe nuk kërkon një pikëpresje në fund.

Ai tregon MySQL zgjidhni bazën e të dhënave të paracaktuar për sesionin aktual. Tani jemi gati të krijojmë tabela dhe të bëjmë gjëra të tjera me bazën e të dhënave.

Çfarë është një tabelë në një bazë të dhënash?

Ju mund ta përfaqësoni tabelën në DB si skedar Excel.

Ashtu si në foto, tabelat kanë emrat e kolonave, rreshtave dhe informacionit. Nëpërmjet SQL pyetje, ne mund të krijojmë tabela të tilla. Ne gjithashtu mund të shtojmë, lexojmë, përditësojmë dhe fshijmë informacione.

KRIJO TABELE: Krijimi i një tabele

C duke përdorur këtë pyetje, ne mund të krijojmë tabela në bazën e të dhënave. Na vjen keq, dokumentacioni MySQL jo shumë e qartë për fillestarët në këtë çështje. Struktura e këtij lloji të pyetjes mund të jetë shumë komplekse, por ne do të fillojmë me një të thjeshtë.

Pyetja e mëposhtme do të krijojë një tabelë me 2 kolona.

CREATE TABLE përdoruesit (emri i përdoruesit VARCHAR (20), data_krijimi DATE);

Ju lutemi vini re se ne mund t'i shkruajmë pyetjet tona në rreshta të shumtë dhe me skeda për dhëmbëzim.

Rreshti i parë është i thjeshtë. Ne thjesht krijojmë një tabelë të quajtur "përdorues". Më pas, në kllapa, të ndara me presje, është një listë e të gjitha kolonave. Pas çdo emri kolone, kemi lloje informacioni si VARCHAR ose DATE.

VARCHAR (20) do të thotë se kolona është e tipit string dhe mund të jetë maksimumi 20 karaktere në gjatësi. DATE është gjithashtu një lloj informacioni që përdoret për të ruajtur datat në këtë format: "VVVV - MM-DD".

ÇELESI PRIMAR ( çelesi primarh)

Përpara se të ekzekutojmë pyetjen tjetër, duhet të përfshijmë gjithashtu një kolonë për "user_id", e cila do të jetë çelësi ynë kryesor. Ju mund të mendoni për një çelës primar si informacion që përdoret për të identifikuar çdo rresht në një tabelë.

KRIJO përdorues TABLE (ID_përdoruesi INT AUTO_INCREMENT PRIMARY KEY, emri i përdoruesit VARCHAR (20), data_krijimi DATE);

INT bën një tip numër të plotë 32 bit (si numrat). AUTO_INCREMENT gjeneron automatikisht një vlerë të re ID sa herë që shtojmë rreshta të rinj informacioni. Kjo është opsionale, por e bën të gjithë procesin më të lehtë.

Kjo kolonë nuk ka nevojë të jetë një vlerë e plotë, por përdoret më së shpeshti. Prania e çelësit primar është gjithashtu opsionale, por rekomandohet për arkitekturën dhe performancën e bazës së të dhënave.

Le të ekzekutojmë pyetjen:

TREGON TABELA:tregoni të gjitha tabelat

Kjo pyetje ju lejon të merrni një listë të tabelave që janë në bazën e të dhënave.

SHPJEGON:Trego strukturën e tabelës

Ju mund ta përdorni këtë pyetje për të treguar strukturën e një tabele ekzistuese.

Afishohen kolonat me të gjitha vetitë.

RREZI TABELA:fshij tabelën

Ashtu si HIQ BAZA TË TË DHËNAVE, kjo pyetje fshin tabelën dhe përmbajtjen e saj pa paralajmërim.

TABELA E NDRYSHME: ndryshimi i tabelës

Ky pyetje mund të përmbajë gjithashtu një strukturë komplekse për shkak të më shumë ndryshimeve që mund të bëjë në tabelë. Le të hedhim një vështrim në disa shembuj.

(nëse e keni fshirë tabelën në hapin e fundit, krijoni përsëri për teste)

SHTIMI I NJË KOLONA

ALTER TABLE përdoruesit SHTO email VARCHAR (100) PAS emrit të përdoruesit;

Për shkak të lexueshmërisë së mirë të SQL, mendoj se nuk ka kuptim ta shpjegojmë atë në detaje. Shtojmë një kolonë të re "email" pas "emrit të përdoruesit".

FSHIJA E NJË KOLONË

Ishte gjithashtu shumë e lehtë. Përdoreni këtë pyetje me kujdes, pasi mund t'i fshini të dhënat pa paralajmërim.

Rikuperoni kolonën që sapo hoqët për eksperimente të mëtejshme.

BËRJA E NDRYSHIMIT NË NJË KOLONA

Ndonjëherë mund të dëshironi të bëni ndryshime në vetitë e një kolone dhe nuk keni nevojë ta fshini plotësisht atë për këtë.

Ky pyetje e riemërtoi kolonën e përdoruesit në "emri_përdorues" dhe ndryshoi llojin e saj nga VARCHAR (20) në VARCHAR (30). Një ndryshim i tillë nuk duhet të ndryshojë të dhënat në tabelë.

INSERT: Shtimi i informacionit në një tabelë

Le të shtojmë disa informacione në tabelë duke përdorur pyetjen e mëposhtme.

Siç mund ta shihni, VALUES () përmban një listë vlerash të ndara me presje. Të gjitha vlerat janë në kolona të vetme. Dhe vlerat duhet të jenë në rendin e kolonave që u përcaktuan kur u krijua tabela.

Vini re se vlera e parë NULL për fushën PRIMARY KEY quhet "user_id". Ne e bëjmë këtë në mënyrë që ID-ja të gjenerohet automatikisht, pasi kolona ka veçorinë AUTO_INCREMENT. Kur informacioni shtohet herën e parë ID do të jetë 1. Rreshti tjetër është 2, e kështu me radhë ...

OPTION ALTERNATIVE

Ekziston një opsion tjetër i pyetjes për shtimin e rreshtave.

Këtë herë ne përdorim fjalën kyçe SET në vend të VALUES dhe nuk ka kllapa. Ka disa nuanca:

Kolona mund të anashkalohet. Për shembull, ne nuk kemi caktuar një vlerë për "user_id", e cila do të jetë e paracaktuar në vlerën e saj AUTO_INCREMENT. Nëse hiqni një kolonë VARCHAR, atëherë do të shtohet një rresht bosh.

Çdo kolonë duhet t'i referohet me emër. Për shkak të kësaj, ato mund të përmenden në çdo mënyrë, ndryshe nga versioni i mëparshëm.

OPTION ALTERNATIVE 2

Këtu është një opsion tjetër.

Përsëri, meqenëse ka referenca për emrin e kolonës, ju mund t'i jepni vlerat në çdo mënyrë.

LAST_INSERT_ID ()

Mund ta përdorni këtë kërkesë për të marrë ID-në që ishte AUTO_INCREMENT për rreshtin e fundit të sesionit aktual.

TANI ()

Tani është koha për të treguar se si mund të përdorni funksionin MySQL në pyetje.

Funksioni TANI () shfaq datën aktuale. Kështu që mund ta përdorni për të vendosur automatikisht datën e kolonës në datën aktuale kur futni një rresht të ri.

Vini re se kemi marrë 1 paralajmërim, por injorojeni atë. Arsyeja për këtë është se TANI () përdoret gjithashtu për të shfaqur informacione të përkohshme.

ZGJIDH: Leximi i të dhënave nga një tabelë

Nëse shtojmë informacion në tabelë, atëherë do të ishte logjike të mësojmë se si ta lexojmë atë nga atje. Këtu do të na ndihmojë pyetja SELECT.

Më poshtë është pyetja më e thjeshtë e mundshme SELECT për të lexuar një tabelë.

Në këtë rast, ylli (*) do të thotë që ne kemi kërkuar të gjitha fushat nga tabela. Nëse dëshironi vetëm kolona specifike, pyetja do të duket kështu.

gjendjaKU

Më shpesh, ne nuk jemi të interesuar për të gjitha kolonat, por vetëm për disa. Për shembull, le të supozojmë se duam vetëm adresën e emailit për përdoruesit "nettuts".

WHERE ju lejon të vendosni kushte në pyetje dhe të bëni zgjedhje të detajuara.

Vini re se një shenjë e barabartë (=) përdoret për barazi, jo dy si në programim.

Ju gjithashtu mund të përdorni krahasime.

AND ose OR mund të përdoret për të kombinuar kushtet:

Vini re se vlerat numerike nuk duhet të citohen.

NË ()

Kjo është e dobishme për marrjen e mostrave të vlerave të shumta.

LIKE

Ju lejon të bëni kërkesa "wildcard".

Shenja % përdoret si karakteristikë. Kjo do të thotë, çdo gjë mund të jetë në vendin e vet.

gjendjaURDHËR NGA

Nëse dëshironi të merrni rezultatin të renditur sipas ndonjë kriteri

Renditja e paracaktuar është ASC (nga e ulëta në e lartë). Për të kundërtën, përdoret DESC.

KUFIZIMI ... OFFSET ...

Ju mund të kufizoni numrin e rezultateve të marra.

LIMIT 2 merr vetëm 2 rezultatet e para. LIMIT 1 OFFSET 2 merr 1 rezultat pas 2 të parëve. LIMIT 2, 1 do të thotë të njëjtën gjë (thjesht kushtojini vëmendje së pari kompensohet dhe më pas kufiri).

PËRDITËSIM: Bëni ndryshime në informacionin në tabelë

Ky pyetje përdoret për të ndryshuar informacionin në një tabelë.

Në shumicën e rasteve, përdoret në lidhje me klauzolën WHERE, pasi me shumë mundësi do të dëshironi të modifikoni disa kolona. Nëse nuk ka klauzolë WHERE, ndryshimet do të prekin të gjitha rreshtat.

Mund të përdorni gjithashtu LIMIT për të kufizuar numrin e rreshtave që duhen modifikuar.

FSHI: Heqja e informacionit nga një tabelë

Ashtu si UPDATE, kjo pyetje përdoret me WHERE:

Për të fshirë përmbajtjen e një tabele, mund ta bëni thjesht si kjo:

FSHI NGA përdoruesit;

Por është më mirë të përdoret I PRAKTUAR

Përveç fshirjes, ky pyetje rivendos edhe vlerat AUTO_INCREMENT dhe kur të shtoni rreshtat përsëri, numërimi do të fillojë nga zero. FSHIJE nuk ka, dhe numërimi mbrapsht vazhdon.

Çaktivizimi i vlerave më të ulëta dhe fjalëve të veçanta

Vlerat e vargut

Disa karaktere duhet të çaktivizohen ( arratisje ), ose mund të ketë probleme.

Për këtë, përdoret një vijë e prapme.(\).

Fjalë të veçanta

Që në MySQL ka shumë fjalë të veçanta ( ZGJIDH ose PËRDITËSO ), për të shmangur gabimet gjatë përdorimit të tyre, duhet të përdorni thonjëza. Por jo citate të zakonshme, por këto(`).

Kjo do të thotë, do t'ju duhet të shtoni një kolonë me emrin " fshij ", duhet të bëhet kështu:

konkluzioni

Faleminderit që lexuat deri në fund. Shpresoj se ky artikull ishte i dobishëm për ju. Nuk ka mbaruar akoma! Vazhdon:).

Unë paraqes në vëmendjen tuaj një përkthim falas të artikullit SQL për fillestarët

Gjithnjë e më shumë aplikacione moderne në internet ndërveprojnë me bazat e të dhënave, zakonisht duke përdorur gjuhën SQL... Për fat të mirë për ne, kjo gjuhë është shumë e lehtë për t'u mësuar. Në këtë artikull, ne do të fillojmë të mësojmë bazat e pyetjeve SQL dhe se si ato ndërveprojnë me bazën e të dhënave. MySQL.

Çfarë ju duhet

SQL (Structured Query Language) është një gjuhë e krijuar për të bashkëvepruar me sistemet relacionale të menaxhimit të bazës së të dhënave (DBMS) si p.sh. MySQL, Oracle, Sqlite dhe të tjerët. Për të ekzekutuar pyetjet SQL nga ky artikull, supozoj se keni instaluar MySQL... Unë gjithashtu rekomandoj përdorimin phpMyAdmin si një mjet për shfaqjen vizuale për MySQL.

Aplikacionet e mëposhtme do ta bëjnë të lehtë instalimin MySQL dhe phpMyAdmin në kompjuterin tuaj:

  • WAMP për Windows
  • MAMP për Mac

Le të fillojmë të ekzekutojmë pyetje në vijën e komandës. WAMP tashmë e përmban atë në tastierë MySQL... Për MAMP, mund t'ju duhet ta lexoni këtë.

KRIJO BAZA E TË DHËNAVE: Krijo bazën e të dhënave

Kërkesa jonë e parë. Ne do të krijojmë një bazë të dhënash për të punuar.

Para së gjithash, hapni tastierën MySQL dhe login. Për WAMP, si parazgjedhje, përdoret një fjalëkalim bosh. Për MAMP fjalëkalimi duhet të jetë "root".

Pasi të regjistroheni, shkruani këtë kërkesë dhe klikoni Hyni:

KRIJO BAZA E TË DHËNAVE my_first_db;

Vini re se një pikëpresje (;) shtohet në fund të pyetjes, ashtu si në fund të një rreshti në kodin tuaj.

Gjithashtu, fjalë kyçe KRIJON BAZA E TË DHËNAVE ka pandjeshmëri të madhe si të gjitha fjalët kyçe në SQL... Por ne do t'i shkruajmë me shkronja të mëdha për lexueshmëri më të mirë.

Shënim: grup karakteresh dhe radhitje

Nëse dëshironi të vendosni grupin e paracaktuar të karaktereve dhe renditjen e renditjes, përdorni një pyetje të ngjashme:

KRIJO BAZA E TË DHËNAVE my_first_db SET E PARAKTUAR E KARAKTERVE utf8 KOLLATE utf8_general_ci;

MySQL.

TREGON BAZA E TË DHËNAVE: Lista e të gjitha bazave të të dhënave

Ky pyetje përdoret për të shfaqur të gjitha bazat e të dhënave.

DROP DATABASE: Heq një bazë të dhënash

Me këtë pyetje, ju mund të lëshoni një bazë të dhënash ekzistuese.

Kini kujdes me këtë pyetje sepse nuk shfaq asnjë paralajmërim. Pasi të keni tabela dhe të dhëna në bazën tuaj të të dhënave, pyetja do t'i fshijë të gjitha ato në një çast.

Në aspektin teknik, kjo nuk është një kërkesë. Është një "operator" dhe nuk kërkon pikëpresje në fund.

Ai informon MySQL që ju duhet të zgjidhni bazën e të dhënave të paracaktuar dhe të punoni me të deri në fund të sesionit. Tani jemi gati të krijojmë tabela dhe të tjerat në këtë bazë të dhënash.

Çfarë është një tabelë e bazës së të dhënave?

Ju mund të mendoni për një tabelë në një bazë të dhënash si një tabelë të rregullt ose si një skedar csv që ka të dhëna të strukturuara.

Si në këtë shembull, tabela ka emrat e rreshtave dhe kolonat e të dhënave. Duke përdorur pyetjet SQL ne mund të krijojmë këtë tabelë. Ne gjithashtu mund të shtojmë, lexojmë, modifikojmë dhe fshijmë të dhënat.

CREATE TABLE: Krijo tabelë

Me këtë pyetje, ne mund të krijojmë një tabelë në bazën e të dhënave. Na vjen keq, dokumentacioni për MySQL jo shumë miqësore për përdoruesit e rinj. Struktura e këtij pyetësori mund të jetë shumë komplekse, por ne do të fillojmë me një të thjeshtë.

Pyetja e mëposhtme krijon një tabelë me dy kolona.

CREATE TABLE përdoruesit (emri i përdoruesit VARCHAR (20), data_krijimi DATE);

Ju lutemi vini re se ne mund të shkruajmë një pyetje në shumë rreshta dhe ta përdorim Tab për dhëmbëzim.

Rreshti i parë është i thjeshtë. Ne krijojmë një tabelë me emrin përdoruesit... Më tej, në kllapa renditen kolonat e tabelës, të ndara me presje. Çdo emër kolone ndiqet nga një lloj i të dhënave, për shembull VARCHAR ose DATA.

VARCHAR (20) do të thotë se kolona është e llojit të vargut dhe nuk mund të jetë më shumë se 20 karaktere në gjatësi. DATA- lloji i të dhënave të destinuara për ruajtjen e datave në formatin: "YYYY-MM-DD".

Çelesi primar

Para se të ekzekutojmë këtë pyetje, duhet të fusim një kolonë user_id, i cili do të jetë ÇELËSI PRIMAR. Pa hyrë në shumë detaje, mund të mendoni për një çelës primar si një mënyrë për të njohur çdo rresht të të dhënave në një tabelë.

Kërkesa bëhet si kjo:

KRIJO përdorues TABLE (ID_përdoruesi INT AUTO_INCREMENT PRIMARY KEY, emri i përdoruesit VARCHAR (20), data_krijimi DATE);

INT- Lloji i numrit të plotë 32-bit (numerik). AUTO_INCREMENT krijon automatikisht një numër të ri id sa herë që shtohet një rresht i të dhënave. Nuk është e nevojshme, por është më e përshtatshme me të.

Kjo kolonë mund të mos jetë një numër i plotë, megjithëse ky është lloji më i zakonshëm i të dhënave. Kolona e çelësit primar është opsionale, por rekomandohet ta përdorni për të përmirësuar performancën dhe arkitekturën e bazës së të dhënave tuaja.

Le të ekzekutojmë pyetjen:

TREGONI TABELA: Lista e të gjitha tabelave

Kërkesa ju lejon të merrni një listë të të gjitha tabelave në bazën aktuale të të dhënave.

SHPJEGON: Trego strukturën e tabelës

Përdoreni këtë pyetje për të parë strukturën e një tabele ekzistuese.

Si rezultat, shfaqen fushat (kolonat) dhe vetitë e tyre.

DOP TABLE: Heq një tabelë

Gjithashtu HIQ BAZA TË TË DHËNAVE, kjo pyetje fshin tabelën dhe përmbajtjen e saj pa asnjë paralajmërim.

ALTER TABLE: Modifikoni një tabelë

Një pyetje e tillë mund të jetë komplekse sepse mund të bëjë ndryshime të shumta në një tabelë. Le të hedhim një vështrim në disa shembuj të thjeshtë.

Falë lexueshmërisë SQL, kjo kërkesë është e vetëshpjegueshme.

Heqja është po aq e lehtë. Përdorni pyetjen me kujdes, të dhënat fshihen pa paralajmërim.

Le të rishtojmë fushën email, më vonë do të jetë ende e nevojshme:

ALTER TABLE përdoruesit SHTO email VARCHAR (100) PAS emrit të përdoruesit;

Ndonjëherë mund t'ju duhet të ndryshoni vetitë e një kolone, nuk keni pse ta fshini dhe ta krijoni përsëri.

Kjo kërkesë riemëron fushën emri i përdoruesit v emri_përdorues dhe ndryshon llojin e saj nga VARCHAR (20)VARCHAR (30)... Ndryshime të tilla nuk ndikojnë në të dhënat në tabelë.

INSERT: Shtimi i të dhënave në një tabelë

Le të shtojmë të dhënat në tabelë duke përdorur pyetje.

Siç mund ta shihni, VLERA () përmban një listë vlerash të ndara me presje. Vlerat e vargut janë të mbyllura në thonjëza të vetme. Vlerat duhet të jenë në rendin e specifikuar kur u krijua tabela.

Vini re se vlera e parë është I PAVLEFSHËM për çelësin primar, fushën e së cilës e emërtuam user_id... Të gjitha sepse fusha është shënuar si AUTO_INCREMENT dhe id gjenerohet automatikisht. Rreshti i parë i të dhënave do të ketë një ID prej 1. Rreshti tjetër që do të shtohet është 2, e kështu me radhë.

Sintaksë alternative

Këtu është një sintaksë tjetër për futjen e vargjeve.

Këtë herë kemi përdorur fjalën kyçe SET në vend të VLERAT... Le të vërejmë disa gjëra:

  • Kolona mund të hiqet. Për shembull, ne nuk i kemi caktuar një vlerë fushës user_id sepse është shënuar si AUTO_INCREMENT... Nëse nuk i caktoni një vlerë një fushe me llojin VARCHAR, atëherë si parazgjedhje do të marrë vlerën e një vargu bosh (përveç nëse është specifikuar një vlerë tjetër e paracaktuar gjatë krijimit të tabelës).
  • Çdo kolonë mund të referohet me emër. Prandaj, fushat mund të jenë në çdo rend, ndryshe nga sintaksa e mëparshme.

Sintaksa alternative numër 2

Ja një shembull tjetër.

Si më parë, ju mund t'i referoheni fushave me emër, ato mund të shkojnë në çdo mënyrë.

Përdoreni këtë pyetje për të marrë ID-në e rreshtit të fundit të futur.

TANI ()

Është koha t'ju tregojmë se si t'i përdorni funksionet MySQL në kërkesat.

Funksioni TANI () kthen datën aktuale. Përdoreni atë për të shtuar automatikisht datën aktuale në një fushë të llojit DATA.

Ju lutemi vini re se ne kemi marrë një paralajmërim nga MySQL por kjo nuk është aq e rëndësishme. Arsyeja është se funksioni TANI () në fakt kthen informacionin e kohës.

Ne krijuam një fushë data_krijimi e cila mund të përmbajë vetëm një datë dhe jo një orë, kështu që të dhënat janë shkurtuar. Në vend të TANI () ne mund të përdornim KURDATE () e cila kthen vetëm datën aktuale, por rezultati përfundimtar do të ishte i njëjtë.

SELECT: Marrja e të dhënave nga një tabelë

Natyrisht, të dhënat që kemi shkruar janë të padobishme derisa t'i lexojmë. Një kërkesë vjen në shpëtim ZGJIDH.

Shembulli më i thjeshtë i përdorimit të një kërkese ZGJIDH për të lexuar të dhënat nga një tabelë:

Ylli (*) do të thotë që ne duam të marrim të gjitha kolonat në tabelë. Nëse ju duhet vetëm të merrni disa kolona, ​​përdorni diçka si kjo:

Më shpesh sesa jo, ne duam të marrim vetëm disa rreshta, jo të gjitha. Për shembull, le të marrim adresën e postës elektronike të përdoruesit rrjeta.

Është e ngjashme me një kusht IF. WHERE ju lejon të vendosni një kusht në një pyetje dhe të merrni rezultatin e dëshiruar.

Shenja e vetme (=) përdoret për kushtin e barazisë, jo dyfishi (==), të cilin ndoshta e përdorni në programim.

Ju gjithashtu mund të përdorni kushte të tjera:

DHE dhe OSE përdoren për të kombinuar kushtet:

Vini re se vlerat numerike nuk kanë nevojë të futen në thonjëza.

NË ()

Përdoret për të krahasuar me vlera të shumta.

LIKE

Ju lejon të vendosni një shabllon për kërkimin.

Shenja e përqindjes (%) përdoret për të specifikuar modelin.

RENDI SIPAS klauzolës

Përdorni këtë kusht nëse dëshironi që rezultati të kthehet i renditur:

Rendi i paracaktuar është ASC(Ngjitje). Shtoni DESC për të renditur në rend të kundërt.

KUFIZIMI ... OFFSET ...

Ju mund të kufizoni numrin e rreshtave të kthyer.

LIMITI 2 merr dy rreshtat e parë. LIMITI 1 OFFSET 2 merr një rresht pas dy të parëve. LIMITI 2, 1 do të thotë e njëjta gjë, vetëm numri i parë është kompensimi, dhe i dyti kufizon numrin e rreshtave.

PËRDITËSIM: Përditësimi i të dhënave në një tabelë

Ky pyetje përdoret për të përditësuar të dhënat në një tabelë.

Në shumicën e rasteve përdoret në lidhje me KU për të përditësuar linja specifike. Nëse kushti KU nuk specifikohet, ndryshimet do të zbatohen në të gjitha rreshtat.

Për të kufizuar vargjet e ndryshueshme, mund të përdorni LIMIT.

FSHIJE: Fshirja e të dhënave nga një tabelë

Gjithashtu , kjo pyetje shpesh përdoret në lidhje me kushtin KU.

TABELA E PRAKTUAR

Për të hequr përmbajtjen nga një tabelë, përdorni një pyetje si kjo:

FSHI NGA përdoruesit;

Për përdorim më të mirë të performancës .

Rivendos gjithashtu numëruesin e fushës AUTO_INCREMENT, kështu që rreshtat e sapo shtuar do të kenë ID të barabartë me 1. Kur përdorni kjo nuk do të ndodhë dhe numëruesi do të vazhdojë të rritet.

Shpëtimi i vlerave të vargut dhe fjalëve të veçanta

Vlerat e vargut

Disa personazhe duhet të shpëtojnë ose mund të ketë probleme.

Prapavija (\) përdoret për arratisje.

Kjo është shumë e rëndësishme për arsye sigurie. Të gjitha të dhënat e përdoruesit duhet të shmangen përpara se të shkruhen në bazën e të dhënave. V PHP përdorni funksionin mysql_real_escape_string () ose deklarata të përgatitura.

Fjalë të veçanta

Që në MySQL shumë fjalë të rezervuara si ZGJIDH ose Për të shmangur konfuzionin, vendosni emrat e kolonave dhe tabelave në thonjëza. Për më tepër, nuk duhet të përdorni thonjëza të zakonshme, por mbrapa (`).

Le të themi, për ndonjë arsye, ju dëshironi të shtoni një kolonë me emrin :

konkluzioni

Faleminderit që lexuat artikullin. Shpresoj se kam qenë në gjendje t'ju tregoj atë gjuhë SQL shumë funksionale dhe e lehtë për t'u mësuar.