Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Këshilla
  • SQL "për dummies": çfarë duhet të dinë fillestarët? Struktura e komandës SQL.

SQL "për dummies": çfarë duhet të dinë fillestarët? Struktura e komandës SQL.

Sot do t'i drejtohemi temës së kompjuterit, kështu që ky artikull do të jetë me interes të veçantë, kryesisht për programuesit. Ne, i dashur lexues, do të flasim për gjuhën e strukturuar të pyetjeve, e cila në versionin anglisht është e koduar si SQL (Structured Query Language). Pra, më shumë në pikën. Tani për tani, le të flasim se çfarë është SQL dhe për çfarë shërben.

Gjuha e strukturuar e pyetjeve është një gjuhë me qëllim të përgjithshëm për krijimin, modifikimin dhe menaxhimin e informacionit që është pjesë e bazave të të dhënave relacionale. Fillimisht, SQL ishte mënyra kryesore për të punuar me të dhënat. Me të, përdoruesi mund të kryejë veprimet e mëposhtme:

  • krijimi i një tabele të re në bazën e të dhënave (DB);
  • shtimi i të dhënave të reja në tabelat ekzistuese;
  • redaktimi i të dhënave;
  • fshirja e plotë e të dhënave;
  • përzgjedhja e të dhënave nga tabela të ndryshme, në përputhje me kushtet e specifikuara;
  • ndryshimi i pamjes dhe strukturave të një ose më shumë tabelave.

Ndërsa është zhvilluar, SQL është transformuar shumë dhe është pasuruar me veçori të reja të dobishme, si rezultat, ajo është bërë gjithnjë e më shumë si një gjuhë e vërtetë programimi. Deri më sot, SQL është i vetmi mekanizëm i aftë për të lidhur softuerin e aplikacionit dhe një bazë të dhënash. Kjo është ajo që është SQL.

SQL ka disa lloje pyetjesh. Vlen të përmendet se çdo pyetje SQL nënkupton ose një kërkesë për të dhëna nga baza e të dhënave të dëshiruar, ose një apel në bazën e të dhënave me një ndryshim të detyrueshëm në të dhënat në të. Në këtë drejtim, është zakon të dallohen llojet e mëposhtme të kërkesave:

  • krijimi ose modifikimi i objekteve të reja ose ekzistuese në bazën e të dhënave;
  • marrja e të dhënave;
  • shtimi i të dhënave të reja në tabelë;
  • fshirja e të dhënave;
  • akses në sistemin e menaxhimit të bazës së të dhënave (DBMS).

Pak për avantazhet dhe disavantazhet e këtij sistemi të menaxhimit të të dhënave.

Përfitimet e SQL

  • Pavarësia nga DBMS që ekziston në sistemin e caktuar. Tekstet SQL janë universale për shumë DBMS. Megjithatë, ky rregull zbatohet për detyra të thjeshta që lidhen me përpunimin e të dhënave në tabela.
  • Prania e standardeve SQL kontribuon në "stabilizimin" e gjuhës.
  • Deklarativiteti. Ky avantazh qëndron në faktin se kur punon me të dhëna, programuesi zgjedh vetëm informacionin që duhet të ndryshohet ose modifikohet. Se si do të bëhet kjo vendoset automatikisht në nivelin e programit të vetë DBMS.

Disavantazhet e SQL

  • SQL nuk ndjek modelin e ndërtimit të të dhënave relacionale. Në këtë drejtim, SQL zëvendëson gjuhën Tutorial D, e cila është vërtet relacionale.
  • Kompleksiteti i SQL përcakton qëllimin e tij. Gjuha është aq komplekse sa që vetëm një programues mund ta përdorë atë. Edhe pse fillimisht u konceptua si një mjet kontrolli me të cilin do të punojë një përdorues i rregullt.
  • Disa mospërputhje në standarde. Shumë kompani DBMS shtojnë veçoritë e tyre në dialektin SQL, gjë që ndikon ndjeshëm në universalitetin e gjuhës.

Një gjë e fundit: çfarë është SQL Server? Ky është një sistem i menaxhimit të bazës së të dhënave që është zhvilluar brenda mureve të kompanisë së njohur Microsoft. Ky sistem funksionon me sukses me bazat e të dhënave, si kompjuterët personalë në shtëpi ashtu edhe bazat e të dhënave të mëdha të ndërmarrjeve të mëdha. Në këtë segment tregu, SQL Server është më se konkurrues.

Epo, fjalë për fjalë me pak fjalë, le të kujtojmë MySQL. Ky aplikacion zakonisht përdoret si një server që merr kërkesa nga klientët lokalë ose të largët. MySQL gjithashtu mund të përfshihet në programe të pavarura. Duhet theksuar se ky aplikacion është një nga sistemet më fleksibël të menaxhimit të të dhënave, pasi përfshin shumë lloje të ndryshme tabelash.

Gjuha e strukturuar e pyetjeve (gjuha e strukturuar e pyetjeve) ose SQL- është një gjuhë programimi deklarative për përdorim në bazat e të dhënave thuajse relacionale. Shumë nga veçoritë origjinale të SQL u morën nga llogaritjet e dyfishta, por zgjerimet e fundit në SQL përfshijnë gjithnjë e më shumë algjebër relacionale.
SQL u krijua fillimisht nga IBM, por shumë shitës kanë zhvilluar dialektet e tyre. Ai u miratua si standard nga Instituti Kombëtar i Standardeve Amerikane (ANSI) në 1986 dhe nga ISO në 1987. Në Standardin e Gjuhës së Programimit SQL, ANSI deklaroi se shqiptimi zyrtar i SQL është "es cue el". Megjithatë, shumë specialistë të bazës së të dhënave përdorën shqiptimin "Slang" "Sequel", duke pasqyruar emrin origjinal të gjuhës, Sequel, i cili më vonë u ndryshua për shkak të konflikteve të markave dhe emrave në IBM. Programimi për fillestarët.
Gjuha e programimit SQL u rishikua në 1992 dhe ky version njihet si SQL-92. Pastaj 1999 u rishikua përsëri për t'u bërë SQL: 1999 (AKA SQL3). Programimi për dummies. SQL 1999 mbështet objekte që nuk mbështeteshin më parë në versione të tjera, por vetëm në fund të vitit 2001, vetëm disa sisteme të menaxhimit të bazës së të dhënave mbështetën zbatimet SQL: 1999.
SQL, megjithëse përkufizohet si ANSI dhe ISO, ka shumë variacione dhe zgjerime, shumica e të cilave kanë karakteristikat e tyre, siç është zbatimi "PL/SQL" i korporatës Oracle, ose zbatimi i Sybase dhe Microsoft i quajtur "Transact-SQL", i cili mund të ngatërron përdoruesin.bazat e programimit. Gjithashtu nuk është e pazakontë që implementimet komerciale të heqin mbështetjen për veçoritë kryesore të standardit, të tilla si llojet e të dhënave si data dhe ora, në favor të disa prej tyre. Si rezultat, ndryshe nga ANSI C ose ANSI Fortran, të cilat zakonisht mund të barten nga platforma në platformë pa ndryshime të mëdha strukturore, pyetjet e gjuhës programuese SQL rrallë mund të transferohen midis sistemeve të ndryshme të bazës së të dhënave pa modifikime të mëdha. Shumica e njerëzve në fushën e bazës së të dhënave besojnë se kjo mungesë ndërveprueshmërie është e qëllimshme në mënyrë që t'i sigurojë secilit zhvillues sistemin e vet të menaxhimit të bazës së të dhënave dhe ta lidh blerësin me një bazë të dhënash të caktuar.
Siç sugjeron emri, gjuha e programimit SQL është projektuar për një qëllim specifik, të kufizuar - kërkimin e të dhënave të përfshira në një bazë të dhënash relacionale. Si i tillë, është një grup udhëzimesh të gjuhës programuese për krijimin e mostrave të të dhënave, në vend të një gjuhe procedurale si C ose BASIC, të cilat janë krijuar për të zgjidhur një gamë shumë më të gjerë problemesh. Shtesat gjuhësore si "PL/SQL" janë krijuar për të adresuar këtë kufizim duke shtuar elemente procedurale në SQL duke ruajtur përfitimet e SQL. Një qasje tjetër është që të lejohen pyetjet SQL për të futur komandat procedurale të gjuhës programuese dhe për të ndërvepruar me bazën e të dhënave. Për shembull, Oracle dhe të tjerët mbështesin gjuhën Java në bazën e të dhënave, ndërsa PostgreSQL lejon që funksionet të shkruhen në Perl, Tcl ose C.
Një shaka SQL: "SQL nuk është as e strukturuar dhe as një gjuhë." Thelbi i shakasë është se SQL nuk është një gjuhë Turing. .

Zgjidhni * nga T
C1 C2
1 a
2 b
C1 C2
1 a
2 b
Zgjidhni C1 nga T
C1
1
2
C1 C2
1 a
2 b
Zgjidhni * nga T ku C1=1
C1 C2
1 a

Duke pasur parasysh një tabelë T, një pyetje Select * nga T do të shfaqë të gjithë elementët e të gjitha rreshtave në tabelë.
Nga e njëjta tabelë, një pyetje Select C1 nga T do të shfaqë elementet nga kolona C1 e të gjitha rreshtave në tabelë.
Nga e njëjta tabelë, pyetësori Select * nga T ku C1=1 do të shfaqë të gjithë elementët e të gjitha rreshtave ku vlera e kolonës C1 është "1".

fjalë kyçe SQL

Fjalët SQL ndahen në një numër grupesh.

E para është Gjuha e manipulimit të të dhënave ose DML(gjuha e menaxhimit të të dhënave). DML është një nëngrup i gjuhës që përdoret për të kërkuar bazat e të dhënave, për të shtuar, përditësuar dhe fshirë të dhënat.

  • SELECT është një nga komandat DML më të përdorura dhe i lejon përdoruesit të specifikojë një pyetje si një përshkrim të rezultatit të dëshiruar si një grup. Pyetja nuk specifikon se si duhet të vendosen rezultatet - përkthimi i pyetjes në një formë që mund të bëhet në bazën e të dhënave është punë e sistemit të bazës së të dhënave, më konkretisht optimizuesit të pyetjeve.
  • INSERT përdoret për të shtuar rreshta (grup formal) në një tabelë ekzistuese.
  • UPDATE përdoret për të ndryshuar vlerat e të dhënave në një rresht ekzistues tabele.
  • DELETE specifikon rreshtat ekzistues që do të hiqen nga tabela.

Tre fjalë kyçe të tjera mund të thuhet se hyjnë në grupin DML:

  • FILLO WORK (ose FILLO TRANSACTION, në varësi të dialektit të SQL) mund të përdoret për të shënuar fillimin e një transaksioni të bazës së të dhënave që ose do të ekzekutohet plotësisht ose nuk do të ekzekutohet fare.
  • COMMIT thotë se të gjitha ndryshimet e të dhënave pas kryerjes së operacionit ruhen.
  • ROLLBACK specifikon që të gjitha ndryshimet e të dhënave që nga kryerja ose rikthimi i fundit duhet të shkatërrohen, deri në pikën që u angazhua në bazën e të dhënave si një "kthim prapa".

COMMIT dhe ROLLBACK përdoren në fusha të tilla si kontrolli i transaksioneve dhe bravat. Të dy udhëzimet përfundojnë të gjitha transaksionet aktuale (grupet e operacioneve të bazës së të dhënave) dhe lëshojnë të gjitha bllokimet për ndryshimin e të dhënave në tabela. Prania ose mungesa e një deklarate BEGIN WORK ose të ngjashme varet nga zbatimi i veçantë i SQL.

Grupi i dytë i fjalëve kyçe i referohet grupit Gjuha e përkufizimit të të dhënave ose DDL (Gjuha e përkufizimit të të dhënave). DDL lejon përdoruesin të përcaktojë tabela të reja dhe elementë të lidhur. Shumica e bazave të të dhënave komerciale SQL kanë zgjerimet e tyre DDL që lejojnë kontrollin mbi elementet jo standarde, por zakonisht jetike të një sistemi të caktuar.
Pikat kryesore të DDL janë komandat e krijimit dhe fshirjes.

  • CREATE specifikon objektet (si p.sh. tabelat) që do të krijohen në bazën e të dhënave.
  • DROP specifikon se cilat objekte ekzistuese në bazën e të dhënave do të hiqen, zakonisht përgjithmonë.
  • Disa sisteme të bazës së të dhënave mbështesin gjithashtu komandën ALTER, e cila lejon përdoruesin të modifikojë një objekt ekzistues në mënyra të ndryshme, si shtimi i kolonave në një tabelë ekzistuese.

Grupi i tretë i fjalëve kyçe SQL është Gjuha e kontrollit të të dhënave ose DCL (Gjuha e kontrollit të të dhënave). DCLështë përgjegjës për të drejtat e aksesit të të dhënave dhe lejon përdoruesin të kontrollojë se kush ka akses për të parë ose manipuluar të dhënat në bazën e të dhënave. Këtu janë dy fjalë kyçe kryesore:

  • GRANT - lejon përdoruesin të kryejë operacione
  • REVOKE - heq ose kufizon aftësinë e përdoruesit për të kryer operacione.

Sistemet e bazës së të dhënave duke përdorur SQL

  • NdërBazë
  • MySQL
  • Orakulli
  • PostgreSQL
  • SQL Server

Si të bëheni një profesionist i zhvillimit të faqes në internet dhe të filloni të fitoni? Kurse video të lira me një hyrje hyrëse.

Gjuhë programimi

SQL (Structured Query Language - Structured Query Language) është një gjuhë e menaxhimit të bazës së të dhënave për bazat e të dhënave relacionale. SQL në vetvete nuk është një gjuhë programimi e plotë Turing, por standardi i saj ju lejon të krijoni zgjerime procedurale për të që zgjerojnë funksionalitetin e saj në një gjuhë programimi të plotë.

Gjuha u krijua në vitet 1970 me emrin "SEQUEL" për sistemin e menaxhimit të bazës së të dhënave System R (DBMS). Më vonë u riemërua "SQL" për të shmangur konfliktet e markave tregtare. Në 1979, SQL u botua për herë të parë si një produkt komercial, Oracle V2.

Standardi i parë i gjuhës zyrtare u miratua nga ANSI në 1986 dhe ISO në 1987. Që atëherë, janë krijuar disa versione të tjera të standardit, disa prej tyre duke përsëritur ato të mëparshme me ndryshime të vogla, të tjera duke marrë karakteristika të reja domethënëse.

Pavarësisht ekzistencës së standardeve, implementimet më të zakonshme të SQL ndryshojnë aq shumë saqë kodi rrallë mund të bartet nga një DBMS në tjetrin pa ndryshime të mëdha. Kjo është për shkak të gjatësisë dhe kompleksitetit të standardit, si dhe mungesës së specifikimeve në disa fusha të rëndësishme të zbatimit.

SQL u krijua si një mënyrë e thjeshtë, e standardizuar për të tërhequr dhe manipuluar të dhënat e përfshira në një bazë të dhënash relacionale. Më vonë, ai u bë më i ndërlikuar se sa ishte menduar dhe u shndërrua në një mjet për zhvilluesin, jo përdoruesin përfundimtar. Aktualisht, SQL (kryesisht e zbatuar nga Oracle) mbetet më e popullarizuara nga gjuhët e bazës së të dhënave, megjithëse ka një sërë alternativash.

SQL përbëhet nga katër pjesë të dallueshme:

  1. Gjuha e përkufizimit të të dhënave (DDL) përdoret për të përcaktuar strukturat e të dhënave të ruajtura në një bazë të dhënash. Deklaratat DDL ju lejojnë të krijoni, modifikoni dhe fshini objekte individuale në bazën e të dhënave. Llojet e vlefshme të objekteve varen nga DBMS-ja e përdorur dhe zakonisht përfshijnë bazat e të dhënave, përdoruesit, tabelat dhe një numër objektesh më të vogla mbështetëse si rolet dhe indekset.
  2. Gjuha e manipulimit të të dhënave (DML) përdoret për të tërhequr dhe modifikuar të dhënat në një bazë të dhënash. Deklaratat DML ju lejojnë të merrni, futni, modifikoni dhe fshini të dhënat në tabela. Ndonjëherë deklaratat e përzgjedhjes së rikthimit të të dhënave nuk konsiderohen pjesë e DML sepse ato nuk ndryshojnë gjendjen e të dhënave. Të gjitha deklaratat DML janë deklarative.
  3. Gjuha e përkufizimit të aksesit të të dhënave (DCL) përdoret për të kontrolluar aksesin në të dhëna në një bazë të dhënash. Deklaratat DCL zbatohen për privilegjet dhe ju lejojnë të jepni dhe revokoni të drejta për të aplikuar deklarata të caktuara DDL dhe DML për objekte të caktuara të bazës së të dhënave.
  4. Gjuha e Kontrollit të Transaksionit (TCL) përdoret për të kontrolluar përpunimin e transaksioneve në bazën e të dhënave. Në mënyrë tipike, deklaratat TCL përfshijnë angazhimin për të kryer ndryshimet e bëra gjatë një transaksioni, rikthimin për t'i anuluar ato dhe pikën e ruajtjes për të ndarë transaksionin në disa pjesë më të vogla.

Duhet të theksohet se SQL zbaton një paradigmë programimi deklarative: çdo deklaratë përshkruan vetëm veprimin e nevojshëm, dhe DBMS vendos se si ta kryejë atë, d.m.th. planifikon operacionet elementare të nevojshme për kryerjen e veprimit dhe i ekzekuton ato. Megjithatë, për të përdorur në mënyrë efektive fuqinë e SQL, zhvilluesi duhet të kuptojë se si DBMS analizon çdo deklaratë dhe krijon planin e tij të ekzekutimit.

Shembuj:

Përshendetje Botë!:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Vargu 'Përshëndetje, Botë!' zgjidhet nga tabela e integruar dual , e përdorur për pyetje që nuk kërkojnë qasje në tabela reale.

zgjidhni "Hello World!" nga dyfishtë;

Faktorial:

Shembull për Oracle 10g SQL , Oracle 11g SQL

SQL nuk mbështet sythe, rekursione ose funksione të përcaktuara nga përdoruesi. Ky shembull tregon një zgjidhje të mundshme duke përdorur:

  • Niveli i pseudo-kolonave për të krijuar pseudo-tabela t1 dhe t2 që përmbajnë numra nga 1 në 16,
  • shuma e funksionit agregat, e cila ju lejon të përmbledhni elementet e një grupi pa përdorur në mënyrë eksplicite një lak,
  • dhe funksionet matematikore ln dhe exp , të cilat ju lejojnë të zëvendësoni produktin (të nevojshëm për të llogaritur faktorialin) me shumën (të ofruar nga SQL).

Vargu “0! = 1” nuk do të përfshihet në grupin e rreshtave që rezulton, sepse Përpjekja për të vlerësuar ln(0) rezulton në një përjashtim.

Numrat e Fibonaçit:

Shembull për Oracle 10g SQL , Oracle 11g SQL

SQL nuk mbështet sythe ose rekursion, dhe bashkimi i fushave nga rreshta të ndryshëm në një tabelë ose pyetje nuk është një funksion agregat standard. Ky shembull përdor:

  • Formula e Binet-it dhe funksionet matematikore ROUND , POWER dhe SQRT për të llogaritur numrin e n-të Fibonacci;
  • Niveli i pseudo-kolonave për të krijuar një pseudo-tabela t1 që përmban numra nga 1 në 16;
  • funksioni i integruar SYS_CONNECT_BY_PATH për lidhjen e renditur të numrave të marrë.

ZGJIDHNI ZËVENDËSUAR (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM (zgjidh n , round ((fuqi ((1 + sqrt (5 )) * 0 . 5 , n ) - fuqi ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib nga (zgjidhni nivelin n nga lidhja e dyfishtë sipas nivelit<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Përshendetje Botë!:

Shembull për versionet Microsoft SQL Server 2005 , Microsoft SQL Server 2008 R2 , Microsoft SQL Server 2012 , MySQL 5 , PostgreSQL 8.4 , PostgreSQL 9.1 , sqlite 3.7.3

zgjidhni "Hello World!" ;

Faktorial:

Shembull për Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Përdoret përkufizimi rekurziv i faktorialit, i zbatuar përmes një pyetësori rekurziv. Çdo rresht i pyetjes përmban dy fusha numerike, n dhe n!, dhe çdo rresht pasues llogaritet duke përdorur të dhënat nga ajo e mëparshme.

Ju mund të llogaritni faktorialë të plotë vetëm deri në 20!. Kur përpiqeni të llogarisni 21! ndodh një "gabim i tejmbushjes aritmetike", d.m.th. ndodh tejmbushja.

Për numrat realë llogaritet faktoriali 100! (Për ta bërë këtë, në shembull, duhet të zëvendësoni bigint me float në rreshtin e 3-të)

Numrat e Fibonaçit:

Shembull për Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Përdoret një përkufizim përsëritës i numrave Fibonacci, i zbatuar përmes një pyetjeje rekursive. Çdo rresht i pyetjes përmban dy numra ngjitur në sekuencë, dhe rreshti tjetër llogaritet si (numri i fundit, shuma e numrave) të rreshtit të mëparshëm. Kështu, të gjithë numrat përveç të parës dhe të fundit ndodhin dy herë, kështu që vetëm numrat e parë të çdo rreshti përfshihen në rezultat.

Faktorial:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull demonstron përdorimin e deklaratës së modelit, i disponueshëm që nga Oracle 10g, i cili lejon që vargjet e pyetjeve të trajtohen si elementë të grupit. Çdo rresht përmban dy fusha - rreshtin numër n dhe faktorialin e tij f.

zgjidhni n || "!=" || f faktorial nga modeli i dyfishtë kthen të gjitha dimensionet e rreshtave me (0 d) masat (0 f, 1 n) rregullat iterate (17) (f [numri_përsëritje] = deshifroj (numri_iteration, 0, 1, f [numri_përsëritje - 1] * Numri_iterimit) , n [numri_përsëritje] = numri_përsëritje);

Numrat e Fibonaçit:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull demonstron përdorimin e deklaratës së modelit, i disponueshëm që nga Oracle 10g, i cili lejon që vargjet e pyetjeve të trajtohen si elementë të grupit. Çdo rresht përmban dy fusha - vetë numrin Fibonacci dhe lidhjen e të gjithë numrave më të vegjël ose të barabartë me të. Lidhja përsëritëse e numrave në të njëjtën pyetje në të cilën gjenerohen është më e lehtë dhe më e shpejtë sesa grumbullimi si një operacion i pavarur.

zgjidhni max(at) || ", ..." nga (zgjidh s nga modeli i dyfishtë ktheji të gjitha dimensionet e rreshtave me (0 d) masa (cast (" " si varchar2 (200 )) s , 0 f ) rregullat iterate (16) (f [iteration_number] = deshifroni (numri_përsëritje, 0, 1, 1, 1, f [numri_përsëritjeje - 1] + f [numri_përsëritjeje - 2]), s [numri_Përsëritje] = deshifroni (numri_përsëritje, 0, në_karak (f [numri_përsëritje__iteration]), 1 ] || ", " || to_char (f [numri_përsëritje])) ));

Faktorial:

Shembull për versionet 5 të MySQL

zgjidhni concat (cast (t2 . n si char ), "!= " , cast (exp (sum (log (t1 . n ))) si char )) nga ( zgjidhni @ i := @ i + 1 AS n nga TABELA , (zgjidh @ i := 0 ) si sel1 limit 16 ) t1 , ( zgjidh @ j : = @ j + 1 AS n nga TABELA , (zgjidh @ j := 0 ) si sel1 limit 16 ) t2 ku t1 . n<= t2 . n group by t2 . n

Numrat e Fibonaçit:

Shembull për versionet 5 të MySQL

Zëvendësoni TABLE me çdo tabelë ku mund të përdorni, si p.sh. mysql.help_topic.

zgjidhni concat (group_concat (f ndarës ", " ), ", ..." ) nga (zgjidh @ f := @ i + @ j si f , @ i := @ j , @ j := @ f nga TABELA , (zgjidh @ i := 1 , @ j := 0 ) sel1 limit 16 ) t

Përshendetje Botë!:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull përdor një bllok anonim PL/SQL që printon një mesazh në dalje standarde duke përdorur paketën dbms_output.

filloni dbms_output. put_line ("Përshëndetje, botë!"); fundi ;

Faktorial:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull demonstron llogaritjen faktoriale iterative duke përdorur PL/SQL.

deklaro n numrin := 0 ; fnumber := 1 ; fillojnë ndërsa (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Numrat e Fibonaçit:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull përdor përkufizimin përsëritës të numrave Fibonacci. Numrat e llogaritur tashmë ruhen në strukturën e të dhënave varray, analoge me një grup.

vektori i llojit të deklarimit është varray (16) i numrit; vektor fib := vektor(); i numrit; svarchar2 (100); fillimfib . shtrihet (16); fib (1) := 1; fib (2) := 1; s:=fib(1) || ", " || fib(2) || ","; për i në 3 .. 16 lak fib (i ) : = fib (i - 1 ) + fib (i - 2 ); s := s || fib(i) || ","; fund-loop; dbms_output . vë_linja(t || "..."); fundi ;

Ekuacioni kuadratik:

Shembull për Oracle 10g SQL , Oracle 11g SQL

Ky shembull është testuar me SQL*Plus, TOAD dhe PL/SQL Developer.

SQL e pastër ju lejon të futni variabla gjatë ekzekutimit të pyetjes si variabla të zëvendësuar. Për të përcaktuar një variabël të tillë, emri i saj (në këtë rast A, B dhe C) duhet të përdoret me një ampersand & përpara saj sa herë që ndryshorja do të referohet. Kur ekzekutohet një pyetje, përdoruesit i kërkohet të fusë vlerat e të gjitha ndryshoreve të zëvendësuara të përdorura në pyetje. Pas futjes së vlerave, çdo referencë për një variabël të tillë zëvendësohet me vlerën e saj dhe pyetja që rezulton ekzekutohet.

Ka disa mënyra për të futur vlera për variablat e zëvendësuar. Në këtë shembull, referenca e parë për çdo ndryshore paraprihet nga një ampersand i dyfishtë && në vend të një ampersand të vetëm. Kështu, vlera për secilën ndryshore futet vetëm një herë dhe të gjitha referencat e mëvonshme për të do të zëvendësohen me të njëjtën vlerë (kur përdorni një ampersand të vetëm në SQL*Plus, vlera për secilën referencë për të njëjtën ndryshore duhet të futet veçmas) . Në PL/SQL Developer, referencat për të gjitha variablat duhet të paraprihen nga një & , përndryshe do të ndodhë një gabim ORA-01008 "Jo të gjitha variablat e lidhura".

Rreshti i parë i shembullit specifikon karakterin për ndarësin dhjetor, i cili përdoret gjatë konvertimit të numrave rrënjë në vargje.

Vetë kërkesa përbëhet nga katër kërkesa të ndryshme. Çdo pyetje kthen një varg që përmban rezultatin e llogaritjeve, në një nga rastet (A=0, D=0, D>0 dhe D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

ndryshimi i grupit të sesioneve NLS_NUMERIC_CHARACTERS = "."; zgjidhni "Jo një ekuacion kuadratik". ans nga dual ku && A = 0 bashkimi zgjidhni "x = " || to_char (-&& B / 2 /& A ) nga dual ku & A != 0 dhe & B *& B - 4 *& A *&& C = 0 bashkimi zgjidhni "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A nga dual ku & A != 0 dhe & B *& B - 4 *& A *& C > 0 bashkim zgjidhni "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" nga dyfishi ku & A != 0 dhe & B *& B - 4 *& A *& C< 0 ;

Leran2002 9 Prill 2015 ora 12:31

Tutorial mbi gjuhën SQL (DDL, DML) duke përdorur si shembull dialektin MS SQL Server. Pjesa e pare

  • Microsoft SQL Server
  • SQL
  • tutorial

Për çfarë është ky tutorial?

Ky tutorial është diçka si një "vulë e kujtesës sime" në gjuhën SQL (DDL, DML), d.m.th. ky është informacion që është grumbulluar gjatë aktiviteteve të mia 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 lind nevoja për të përdorur konstruksione më të plota SQL, atëherë zakonisht i drejtohem bibliotekës MSDN që ndodhet në internet për ndihmë. Për mendimin tim, të mbash gjithçka në kokën tënde është shumë e vështirë dhe nuk ka nevojë të veçantë për këtë. Por njohja e konstruksioneve bazë është shumë e dobishme, 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 pranë një redaktues teksti të mjedisit (IDE) për të punuar me një bazë të dhënash dhe nuk ka nevojë të mësoni një paketë veglash vizuale të mprehur për duke punuar me një lloj specifik të bazës së të dhënave (MS SQL, Oracle, MySQL, Firebird, ...). Kjo është gjithashtu e përshtatshme 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. Kur punoni vazhdimisht me bazën e të dhënave, krijimi, modifikimi 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 shkrimit (përkatësisht, me kujdesin e duhur), është më e lehtë të vendosësh dhe kontrollosh 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ë shqyrtoj 2 pjesët më të rëndësishme të saj:
  • DML - Gjuha e manipulimit të të dhënave (gjuhë 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 praktikues, si i tillë do të ketë pak teori në këtë tekst 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 në praktikë vetëm duke e prekur atë vetë dhe duke kuptuar se çfarë ndodh kur ekzekutoni këtë apo atë ndërtim.

Ky tutorial u krijua 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 duhet të mësoni më shumë për një komandë, atëherë përdorni një kërkim specifik në internet, për shembull, në bibliotekën MSDN.

Kur shkruajta këtë tutorial, përdora një bazë të dhënash të versionit 2014 të MS SQL Server dhe përdora MS SQL Server Management Studio (SSMS) për të ekzekutuar skriptet.

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 i SQL Server Management Studio është Object Explorer, i cili i lejon përdoruesit të shikojë, të marrë dhe të menaxhojë objektet e serverit. Ky tekst është pjesërisht i huazuar 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 grup komandash), zgjidhni atë dhe shtypni butonin Ekzekutoni ose butonin F5. Nëse ka vetëm një komandë në redaktues për momentin, ose nëse 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 Refresh 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ë plotësuar 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 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 - Sistemi për menaxhimin e këtyre bazave të të dhënave, d.m.th. ky ë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ë të folurit bisedor, ne më së shumti themi: “Oracle DB”, apo 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 çfarë saktësisht bëhet fjalë.

Një tabelë është një koleksion kolonash. Kolonat mund të quhen edhe fusha ose kolona, ​​të gjitha këto fjalë do të përdoren si sinonime, duke 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. Linjat, regjistrimet janë gjithashtu sinonime.

Për secilën tabelë, si dhe kolonat e saj, jepen emra, me të cilët referohen më pas.
Emri i objektit (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 karakteresh. Prandaj, për një bazë të dhënash të veçantë, ju duhet të zhvilloni rregullat tuaja për emërtimin e objekteve në mënyrë që të përmbushni kufirin në numrin e karaktereve.

SQL është një gjuhë që ju lejon të kërkoni bazën e të dhënave përmes DBMS. Në një DBMS të veçantë, 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 marrëdhënie.
  • Gjuha DML ju lejon të manipuloni të dhënat e 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.

Në gjuhën SQL, mund të përdorni 2 lloje komentesh (me një rresht dhe me shumë rreshta):

Koment me një rresht
dhe

/* koment me shumë rreshta */

Në fakt, gjithçka për teorinë e kësaj do të jetë e mjaftueshme.

DDL - Gjuha e përkufizimit të të dhënave (gjuha e përshkrimit të të dhënave)

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

Në këtë rast, kolonat e tabelës kanë emrat e mëposhtëm: 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
  • Email - varg
  • Pozicioni - varg
  • departament - varg
Lloji i kolonës është një karakteristikë që tregon se çfarë lloj të dhënash mund të ruajë kjo kolonë.

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 në 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ë vargut 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 të vendosim llojin e saj në nvarchar (30).
Dallimi midis varchar dhe nvarchar është se varchar ju lejon të ruani vargjet në formatin ASCII, ku një karakter zë 1 bajt, ndërsa nvarchar ruan vargjet në formatin Unicode, ku çdo karakter zë 2 bajt.
Lloji varchar duhet të përdoret vetëm nëse jeni 100% i sigurt se fusha nuk do të ketë 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 char (N)
dhe
nchar(N)
Ky lloj ndryshon nga një varg me gjatësi të ndryshueshme në atë që nëse gjatësia e vargut është më e vogël se N karaktere, atëherë ai gjithmonë mbushet djathtas në gjatësinë e N hapësirave dhe ruhet në bazën e të dhënave në këtë formë, d.m.th. në bazën e të dhënave ai zë saktësisht N karaktere (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 përcaktohet me një karakter të vetëm.
Numër i plotë ndër Ky lloj na lejon të përdorim vetëm numra të plotë, pozitivë dhe negativë, në kolonë. Për referencë (kjo nuk është aq e rëndësishme për ne tani) - diapazoni i numrave që lejon lloji int nga -2 147 483 648 në 2 147 483 647. Ky është zakonisht 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 është e nevojshme të ruhet vetëm data në kolonë, 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., d.m.th. 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 kolona duhet të ruajë vetëm të dhëna kohore, d.m.th. Orë, minuta, sekonda dhe milisekonda. Për shembull, 17:38:31.3231603
Për shembull, ditore "Ora e nisjes së fluturimit".
Data dhe ora ora e datës Ky lloj ju lejon të ruani njëkohësisht datën dhe orën. Për shembull, 15.02.2014 5:38:31.323 PM
Për shembull, kjo mund të jetë data dhe ora e një ngjarjeje.
Flamuri pak Ky lloj është i dobishëm për ruajtjen e vlerave Po/Jo, ku Po do të ruhet si 1 dhe Jo do të ruhet si 0.

Gjithashtu, vlera e fushës, në rast 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ë të dhënash 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:

Testi i SHBA
Përndryshe, zgjidhni bazën e të dhënave Test nga lista rënëse në zonën e menysë SSMS. Në punë, unë shpesh përdor këtë metodë të kalimit midis bazave të të dhënave.

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ësit]([Numri i personelit] int, [Emri] nvarchar(30), [Data e lindjes] data, nvarchar(30), [Pozicioni] nvarchar(30), [Departamenti] nvarchar(30))
Në këtë rast, do të na 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ë latinisht dhe të mos përdorni hapësira në emra. Në MS SQL, zakonisht në këtë rast, çdo 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 emrave "PHONE_NUMBER" mund të jetë më i preferueshëm, për shembull, ky format përdoret shpesh në bazën e të dhënave ORACLE. Natyrisht, kur vendosni emrin e fushës, është e dëshirueshme që ai të mos përputhet 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 fushave të saj mund të jepen emrat e mëposhtëm:

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

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

KRIJO TABELA E Punonjësve(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ë tashmë ekzistuese, fushat mund të ripërcaktohen duke përdorur komandat e mëposhtme:

Përditëso fushën ID ALTER TABLE Punonjësit ALTER KOLUMN ID int NOT NULL -- përditëso fushën e 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, mund ta gjykoj këtë nga DBMS me të cilin pata një shans të punoja). Dallimi midis DDL në DBMS të ndryshme është kryesisht në llojet e të dhënave (jo vetëm emrat e tyre mund të ndryshojnë këtu, por edhe detajet e zbatimit të tyre), vetë specifikat e zbatimit të gjuhës SQL gjithashtu mund të ndryshojnë pak (dmth. 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, mund të kaloni lehtësisht nga një DBMS në një tjetër. në këtë rast, do t'ju duhet vetëm të kuptoni detajet e zbatimit të komandave në DBMS-në e re, d.m.th. në shumicën e rasteve, do të jetë e mjaftueshme vetëm për të nxjerrë një analogji.

Krijimi i tabelës CREATE TABLE Employees(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 nvarchar2( 30) , Pozicioni nvarchar2(30), Departamenti nvarchar2(30)); -- përditësimi i fushave të 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); -- Shtimi i një 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ë bajt 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:

NAME 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ë rast të një specifikimi 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ë ngatërroheni lehtësisht, kështu që në rastin e ORACLE, nëse përdoret lloji varchar2 (dhe kjo ndonjëherë justifikohet këtu, për shembull, kur përdorni kodimin UTF-8), unë preferoj të shkruaj në mënyrë eksplicite CHAR (sepse zakonisht është më i përshtatshëm për të lexuar gjatësinë e një vargu me karaktere).

Por në këtë rast, nëse tashmë ka disa të dhëna në tabelë, atëherë për ekzekutimin me sukses 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 gjithashtu do të hedhë një gabim, sepse gjatë futjes, ne nuk e kemi specifikuar vlerën e fushës së kërkuar Emri.
Nëse do t'i kishim tashmë këto të dhëna në tabelën origjinale, atëherë komanda "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" do të ishte ekzekutuar me sukses dhe komanda "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" do të kishte lëshuar një gabim. mesazh, se ka vlera NULL (të paspecifikuara) në fushën Emri.

Le të shtojmë vlera për fushën Emri dhe të plotësojmë 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, fshini tabelën me komandën:

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

KRIJO TABELA E Punonjësve(ID-ja 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ë nënkuptohet si parazgjedhje.

Nëse, përkundrazi, dëshironi të bëni një kolonë ekzistuese opsionale, atëherë përdorni 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)
Me këtë komandë, ne gjithashtu 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, kjo vlerë 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 PRIMARY KEY(ID)
Ku "PK_Employees" është emri i kufizimit përgjegjës për çelësin primar. Zakonisht, çelësi primar emërtohet me prefiksin "PK_" 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,fusha2,…)
Vlen të theksohet se në MS SQL të gjitha fushat që përfshihen në çelësin primar duhet të kenë karakteristikën NOT NULL.

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

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

KRIJO TABELËN 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ërshkruaj të gjitha fushat si kufizim)
Pas krijimit, plotësoni të dhënat e tabelës:

INSERT Punonjësit(ID,Pozicioni,Departamenti,Emri) VALUES (1000,N"Drejtor",N"Administrim",N"Ivanov II.), (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 TABELËN E Punonjësit (ID int NUK NULL KUFIZIM PK_Punonjësit ÇELËSI KRYESOR, -- specifikoni Emrin nvarchar(30) NOT NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30)
Në fakt, emri i kufizimit mund të hiqet, në të cilin rast do t'i jepet një emër sistemi (si "PK__Employee__3214EC278DA42077"):

KRIJO TABELËZE Punonjësit(ID int NUK 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 TABELËZE Punonjësit (ID int JO NULL ÇELËSI KRYESOR, Emri nvarchar(30) JO NULL, Data e ditëlindjes, Email nvarchar(30), Pozicioni nvarchar(30), Departamenti nvarchar(30))
Por unë do të rekomandoja që gjithmonë të vendosni në mënyrë eksplicite emrin e kufizimit për tabelat e përhershme, sepse 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ë e tillë 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 një tabele të 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 - përdoret 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 kolonës ose për të ndryshuar cilësimet e saj (për shembull, për të vendosur karakteristikën NULL ose NOT NULL);
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri_kufizues ÇELESI PRIMAR(fusha 1, fusha 2,…) – shtimi i një çelësi primar në një tabelë ekzistuese;
  • TABELA ALTER emri_tabele KUFIZIMI I RËZIMIT constraint_name - hiqni kufizimin nga tabela.

Pak për tavolinat e përkohshme

Prerje 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 sesioni i lidhjes me shembullin e SQL Server të përfundojë pasi ato të krijohen për herë të parë. Tabelat e përkohshme lokale fshihen 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 fshihen 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 bllokojmë bazën e të dhënave kryesore, përndryshe tabelat e përkohshme janë plotësisht identike me tabelat e rregullta, ato gjithashtu mund të fshihen duke përdorur komandën DROP TABLE. Tabelat e përkohshme lokale (#) përdoren më shpesh.

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

KRIJO TABELE #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 fshini atë në përputhje me rrethanat me komandën DROP TABLE:

TABELA E REZIMIT #Temp

Ju gjithashtu mund të krijoni një tabelë të përkohshme (si dhe një tabelë të rregullt) dhe menjëherë ta plotësoni me të dhënat e kthyera nga pyetja duke përdorur sintaksën SELECT ... INTO:

SELECT ID, Emri INTO #Temp FROM Punonjësit

Në një shënim
Në DBMS të ndryshme, zbatimi i tabelave të përkohshme mund të ndryshojë. Për shembull, në DBMS ORACLE dhe Firebird, struktura e tabelave të përkohshme duhet të përcaktohet paraprakisht nga komanda CREATE GLOBAL TEMPORARY TABLE, duke treguar specifikat e ruajtjes së të dhënave në të, atëherë përdoruesi e sheh atë midis tabelave kryesore dhe punon me të. si me një tryezë të rregullt.

Normalizimi i bazës së të dhënave - ndarja në nën-tabela (drejtori) dhe përcaktimi i marrëdhënieve

Tabela jonë aktuale e Punonjësve ka disavantazhin që përdoruesi mund të fusë çdo tekst në fushat Pozicioni dhe Departamenti, gjë që është kryesisht e mbushur me gabime, pasi për një punonjës ai thjesht mund të tregojë "IT" si departament, dhe për punonjësin e dytë, për shembull, shkruani "Departamenti IT", keni "IT" të tretë. Si rezultat, nuk do të jetë e qartë 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 e ka përshkruar veten dhe këto janë 3 departamente të ndryshme? Dhe aq 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.

E meta e 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 një vend në bazën e të dhënave për të ruajtur çdo karakter nga emri i departamentit.

E meta e tretë është vështirësia e përditësimit të këtyre fushave nëse emri 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, përdoret i ashtuquajturi normalizimi i bazës së të dhënave - ndarja e saj në nën-tabela, tabela referuese. Nuk është e nevojshme të ngjitemi në xhunglën e teorisë dhe të studiojmë se cilat janë format normale, mjafton të kuptojmë thelbin e normalizimit.

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

KRIJO POZICIONET TABELE (ID int IDENTITY(1,1) NOT NULL KUFIZIM PK_Pozicionet ÇELËSI PRIMAR, Emri nvarchar(30) NOT NULL) KRIJO TABELA E Departamenteve(ID int IDENTITY(1,1) NOT NULL KUNSTRAINT Name ) JO NULL)
Vini re se këtu kemi përdorur opsionin e ri IDENTITY, që do të 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 të shtohen regjistrime të reja, atyre do t'u caktohen vlerat 1, 2, 3, e kështu me radhë. Fusha të tilla zakonisht quhen auto-incrementing. 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 ndryshe. Në MySQL, për shembull, një fushë e tillë përcaktohet duke përdorur opsionin AUTO_INCREMENT. Në ORACLE dhe Firebird, ky funksionalitet mund të simulohej më parë 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 e pozicionit të tabelës së punonjësve INSERT Pozicionet(Emri) ZGJIDH pozicionin e dallueshëm NGA Punonjësit WHERE Pozicioni NUK ËSHTË NULL - hidhni të dhënat pa asnjë pozicion të specifikuar
Ne do të bëjmë të njëjtën gjë për tabelën e Departamenteve:

INSERT Departamentet(Emri) ZGJIDH Departamentin e NDRYSHEM 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 nga fusha ID:

SELECT * NGA Pozicionet

ZGJIDH * NGA Departamentet

Këto tabela tani do të luajnë rolin e drejtorive për vendosjen 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 e punonjësve për të ruajtur të dhënat e ID-së:

Shto fushë për pozicionin ID ALTER TABLE Punonjësit ADD PositionID int -- shto fushën për ID-në e departamentit ALTER TABLE Punonjësit SHTO ID e Departamentit int
Lloji i fushave të referencës duhet të jetë i njëjtë si në drejtoritë, 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 le të shkruajmë lidhje (kufizimet e referencës - ÇELËSI I HUAJ) për këto fusha, në mënyrë që përdoruesi të mos ketë mundësinë të shkruajë në këto fusha, vlera që nuk janë ndër vlerat e ID-së në drejtori.

ALTER TABLE Punonjësit SHTO KUFIZIM FK_Employees_PositionID ÇELËSI I HUAJ(Pozicioni ID) 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 Departamentit) REFERENCAT Departamentet(ID)
Tani përdoruesi do të jetë në gjendje të fusë vetëm vlerat e ID-së nga libri përkatës i referencës 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ë hyrje të re 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 një kufizimi referencial është zakonisht i përbërë, ai përbëhet nga parashtesa "FK_", e ndjekur nga emri i tabelës dhe pas nënvizimit vjen emri i fushës që i referohet identifikuesit të tabelës së kërkimit.

Identifikuesi (ID) është zakonisht një vlerë e brendshme që përdoret vetëm për lidhje dhe çfarë vlere ruhet atje, në shumicën e rasteve, është absolutisht indiferent, kështu që nuk ka nevojë të përpiqeni të hiqni qafe vrimat në sekuencën e numrave që lindin gjatë punës me një tabelë, për shembull, pas fshirjes së të dhënave nga manuali.

NDRYSHO TABELA E TABELAVE SHTO KUFIZIM KUFIZIM_emrin ÇELËSI I HUAJ(fusha1,fusha2,…) Tabela e kërkimit të REFERENCAT (fusha1,fusha2,…)
Në këtë rast, në tabelën "table_reference", çelësi primar përfaqësohet nga një kombinim i disa fushave (fusha1, fusha 2, ...).

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

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

SELECT * NGA Punonjësit

Kjo është e gjitha, fushat PositionID dhe DepartmentID janë të mbushura me pozicionet dhe departamentet përkatëse me ID-të e nevojës në fushat Pozicioni dhe Departamenti në tabelën e Punonjësve tani, ju mund të fshini këto fusha:

ALTER TABLE Punonjësit DOP KOLONA Pozicioni, Departamenti
Tabela tani duket si kjo:

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. përfundimisht u çliruam nga ruajtja e informacionit të tepërt. Tani, nga pozicioni dhe numrat e departamentit, ne mund të përcaktojmë në mënyrë unike emrat e tyre duke përdorur vlerat në tabelat e kërkimit:

SELECT e.ID,e.Emri,p.Emri PozicioniEmri,d.Emri Emri i Departamentit FROM Employees e LEFT JOIN Departamentet d ON d.ID=e.DepartmentID LEFT JOIN Pozicionet p ON p.ID=e.PositionID

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

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

ALTER TABLE Punonjësit ADD ManagerID int
Vlera 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)
Tani le të krijojmë një diagram dhe të shohim se si duken në të marrëdhëniet midis tabelave tona:

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

Së fundi, vlen të përmendet 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 të referuar në tabelën e kërkimit. Nëse këto opsione nuk janë të specifikuara, atëherë ne nuk mund ta ndryshojmë ID-në në tabelën e drejtorisë së hyrjes që ka lidhje nga një tabelë tjetër, as nuk mund ta fshijmë një hyrje të tillë nga drejtoria derisa të fshijmë të gjitha rreshtat që i referohen kësaj hyrjeje ose, Le të përditësoni këto rreshta referencash në një vlerë tjetër.

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_DeployNID), CONSTRAIDEEmparte ) REFERENCAT Departamentet(ID) MBI FSHIJEN KASCADE, KUFIZIM FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCAT Pozicione(ID), KUFIZIM FK_Employees_ManagerID FOREIGN KEY (ManagerID) HUAJ KEY (ManagerID) EmployeinID,PunonjësID,Punonjësi )VLERA (1000,N"Ivanov II","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ë heqim 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 hyn në fuqi kur përditësohet vlera e ID-së në drejtori. Për shembull, nëse ndryshojmë ID-në e pozicionit në drejtorinë e pozicioneve, atëherë në këtë rast ID-ja e Departamentit në tabelën Employees do të përditësohet në vlerën e re të ID-së që kemi vendosur në drejtori. Por në këtë rast, thjesht nuk do të jetë e mundur të demonstrohet kjo, sepse. kolona ID në tabelën Departamentet ka opsionin IDENTITY, i cili do të na pengojë të ekzekutojmë pyetjen e mëposhtme (ndryshoni ID-në e departamentit 3 në 30):

PËRDITËSONI Departamentet SET ID=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 specifikoni ato në një kufizim referues. nëse fshini aksidentalisht një rekord nga tabela e referencës, kjo mund të çojë në probleme të mëdha dhe të krijojë një reaksion zinxhir.

Le të rivendosim departamentin 3:

Jep leje për të shtuar/ndryshuar vlerat IDENTITY SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- refuzo shtimin/ndryshimin e vlerave IDENTITY SET IDENTITY_INSERT Departments OFF
Pastrojeni 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 e menaxherit) VLERAT (1000,N"Ivanov II","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ë fushë - ju mundëson që kjo fushë të plotësohet automatikisht (fusha numërues) për tabelën;
  • TABELA ALTER emri_tabele SHTO list_of_fields_with_characteristics – ju lejon të shtoni fusha të reja në tabelë;
  • TABELA ALTER emri_tabele KOLONA E RËZIMIT list_of_fields - ju lejon të hiqni fushat nga tabela;
  • TABELA ALTER emri_tabele SHTO KUFIZIM emri_kufizues ÇELËSI I HUAJ(fushat) REFERENCAT lookup_tabela(fushat) – ju lejon të përcaktoni një marrëdhënie midis një tabele dhe një tabele kërkimi.

Kufizime të tjera - UNIK, I PARALAKTUAR, KONTROLLO

Me kufizimin UNIQUE, mund të thoni se vlera për çdo rresht në një fushë të caktuar ose grup fushash duhet të jetë 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ë:

UPDATE 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 Employees SET Email=" [email i mbrojtur]" WHERE ID=1003
Dhe tani mund të vendosni një kufizim unik 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 vendoset 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,fusha2,…)
Duke shtuar një kufizim DEFAULT në një fushë, ne mund të vendosim një vlerë të paracaktuar që do të zëvendësohet nëse fusha nuk është e listuar në listën e fushave të komandës INSERT kur futet një rekord i ri. Ky kufizim mund të vendoset drejtpërdrejt kur krijoni një tabelë.

Le të shtojmë një fushë të re "Data e rekrutimit" në tabelën e Punonjësve dhe ta emërojmë atë HireDate dhe të themi se vlera e paracaktuar për këtë fushë do të jetë data aktuale:

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

Punonjësit e ALTER TABLE SHTO SYSDATETIME() DEFAULT FOR HireDate
Këtu nuk e specifikova emrin e kufizimit, sepse në rastin e DEFAULT-it, unë isha i mendimit se kjo nuk është aq kritike. Por nëse e bëni në një mënyrë të mirë, atëherë, mendoj, nuk keni nevojë të jeni dembel dhe duhet të vendosni 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ë hyrje të re, data aktuale do të futet gjithashtu automatikisht, natyrisht, nëse nuk e vendosim në mënyrë eksplicite, d.m.th. nuk 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 i kontrollit 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 ynë i punonjësve (ID). Duke përdorur këtë kufizim, le të themi se numrat e personelit duhet të kenë një vlerë nga 1000 në 1999:

ALTER TABLE Punonjësit SHTO KUFIZIM CK_Punonjësit_ID KONTROLLI (ID MES 1000 DHE 1999)
Kufizimi zakonisht emërtohet i njëjtë, fillimisht me parashtesën "CK_", pastaj emrin e tabelës dhe emrin e fushës në të cilën zbatohet kufizimi.

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

INSERT Punonjësit (ID, Email) VALUES (2000" [email i mbrojtur]")
Tani le të ndryshojmë vlerën që do të futet në 1500 dhe të sigurohemi që rekordi është 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 ADD CHECK (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, sepse për të kuptuar më vonë se çfarë 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 një kufizimi mund të mësohen 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 rikrijoni atë me të gjitha kufizimet e krijuara me një komandë CREATE TABLE:

KRIJO TABELA E Punonjësve(ID int NOT NULL, Emri nvarchar(30), Data e ditëlindjes, Email nvarchar(30), PositionID int, DepartmentID int, Data Data NOT NULL DEFAULT SYSDATETIME(), -- për DEFAULT do të hedh një PPK_EmployeRI Përjashtim KYÇ (ID), KONSTRAINT FK_Punonjës_ID KYÇI I HUAJ(ID Departamentit) REFERENCES Departamentet(ID), CONSTRAINT FK_Punonjës_Pozicioni ID ÇELËSI I HUAJ(ID) REFERENCAT Pozicionet(ID), CONSTRAINT UQE-mailHE_EmployeES (UQE_Punonjës)

INSERT Punonjësit (ID, Emri, Ditëlindja, Emaili, ID e Pozicionit, ID e Departamentit) 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 krijoni kufizimet PRIMARY KEY dhe UNIQUE, u krijuan automatikisht indekset me të njëjtët emra (PK_Employees dhe UQ_Employees_Email). Si parazgjedhje, indeksi për çelësin primar krijohet si TË GRUPTUAR, dhe për të gjithë indekset e tjera si NONCLUSTERED. Vlen të thuhet se koncepti i një indeksi të grupuar nuk është i disponueshëm në të gjitha DBMS. Një tabelë mund të ketë vetëm një indeks të GRUPTUAR. CLUSTERED - do të thotë se të dhënat e tabelës do të renditen sipas këtij indeksi, gjithashtu mund të thuhet se ky indeks ka qasje të drejtpërdrejtë në të gjitha të dhënat e tabelës. Kështu të themi indeksi kryesor i tabelës. Për ta thënë edhe më përafërt, është një indeks i vidhosur në tavolinë. Indeksi i grupuar është një mjet shumë i fuqishëm që mund të ndihmojë në optimizimin e pyetjeve, thjesht mbani në mend këtë. Nëse duam të themi se indeksi i grupuar 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 PA GJITHË (fusha1,fusha2,…)
Për shembull, le ta bëjmë indeksin e kufizimeve PK_Employees jo të grupuar dhe indeksin e kufizimeve UQ_Employees_Email të grumbulluar. Para së gjithash, le 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
Dhe tani le t'i krijojmë ato me opsionet TË 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, kur zgjedhim 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 i grupuar ishte indeksi PK_Employees, të dhënat ishin renditur si parazgjedhje sipas fushës ID.

Por në këtë rast, ky është vetëm një shembull që tregon thelbin e indeksit të grupuar, sepse. 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 referencë.

Për drejtoritë, zakonisht këshillohet që indeksi i grupuar të ndërtohet në çelësin primar, sepse në kërkesat, ne shpesh i referohemi identifikuesit 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 rrjedh se ne mund të marrim vlerën e çdo kolone pa shpenzime shtesë.

Indeksi i grupuar është i dobishëm për t'u aplikuar në fushat që zgjidhen më shpesh.

Ndonjëherë tabelat krijojnë një çelës nga një fushë zëvendësuese, në të cilin rast është e dobishme të mbash opsionin e indeksit CLUSTERED për një indeks më të përshtatshëm dhe të specifikosh 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ë si "ALTER TABLE tabela_emri ADD CONSTRAINT constraint_name...":
  • ÇELESI PRIMAR- çelesi primar;
  • ÇELËSI I HUAJ- vendosja e lidhjeve dhe monitorimi i integritetit të referencës së të dhënave;
  • UNIK- ju lejon të krijoni unike;
  • KONTROLLO- ju lejon të kryeni 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 grupit ( TË GRUPTUARA) dhe jo të grupuara ( PA KONTROLLER) indeksi.

Krijimi i indekseve të pavarura

Vetë-mjaftueshmëria këtu i referohet indekseve që nuk krijohen për një kufizim PRIMAR KY ose UNIQUE.

Indekset në një fushë ose fusha mund të krijohen me komandën e mëposhtme:

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

KRIJONI INDEKS UNIK JO GJENDJE TË RREGULLAR UQ_Employees_EmailDesc ON Employees (Email DESC)
Kur krijoni një indeks jo të grupuar, opsioni NONCLUSTERED mund të hiqet, si nënkuptohet si parazgjedhje, këtu tregohet thjesht për të treguar pozicionin e opsionit CLUSTERED ose NONCLUSTERED në komandë.

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

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

Për shembull, le të fshijmë përsëri tabelën:

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

KRIJO TABLETË Punonjësit(ID int NUK 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_HireData DEFAULT SYSDATEtEYTREQID,Menaxheri DEFAULT SYSDATEtTIMETRINSID (Menaxheri) ), Constraint FK_EMPLYEES_DEPARTIDE KEULLET E JASHTME (DEPARTAMENTID) Referencat e Departamenteve (ID), Kufizimi i KEjës së Jashtme (PositionID) Referencat Pozitat (ID), Constraint FK_EMPLYEEES_MANAGRIID KEY KEY (ID), Constraint UQ_EMPLYEES_EMAIL CONCECT (ID ndërmjet 1000 dhe 1999), INDEX IDX_Emri_punonjësit(Emri))
Së fundi, futni në tabelën e punonjësve tanë:

INSERT Punonjësit (ID, Emri, Ditëlindja, Email, Pozicioni ID, DepartmentID, Menaxher ID) VLERAT (1000,N"Ivanov II","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 vlerat mund të përfshihen në një indeks jo të grupuar duke i specifikuar ato në INCLUDE. ato. në këtë rast, indeksi INCLUDE do të ngjajë disi me një indeks të grumbulluar, vetëm tani indeksi nuk është i bashkangjitur në tabelë, por vlerat e nevojshme i janë bashkangjitur indeksit. 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ë në indeks, atëherë është e mundur që të mos ketë fare nevojë për të hyrë në tabelë. Por kjo natyrisht rrit madhësinë e indeksit, sepse vlerat e fushave të listuara dublikohen në indeks.

Prerje nga MSDN. Sintaksa e Komandës së Përgjithshme për Krijimin e Indekseve

KRIJONI [UNIK] [TË GJENDUR | PA GJITHË ] Emri i indeksit INDEX AKTIV (kolona [ ASC | DESC ] [ ,...n ]) [ PËRFSHI (emrin e_kolonës [ ,...n ]) ]

Le të përmbledhim

Indekset mund të rrisin shpejtësinë e rikthimit të të dhënave (SELECT), por indekset zvogëlojnë shpejtësinë e përditësimit 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.

Është e dëshirueshme që në çdo rast të gjendet zgjidhja optimale, mesatarja e artë, në mënyrë që si performanca e kampionimit ashtu edhe 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 mbi DDL

Siç mund ta shihni, gjuha DDL nuk është aq e komplikuar sa mund të duket në shikim të parë. Këtu munda të tregoja pothuajse të gjitha modelet e tij kryesore, duke përdorur vetëm tre tabela.

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

Fat të mirë në zotërimin e kësaj gjuhe të mrekullueshme të quajtur SQL.

bazat e të dhënave që mund të funksionojnë në sisteme të shumta kompjuterike të llojeve të ndryshme. Në të vërtetë, me ndihmën e tij, përdoruesit mund të manipulojnë të dhënat pavarësisht nëse janë duke punuar në një kompjuter personal, një stacion pune në rrjet ose një mainframe.

Një nga gjuhët që u shfaq si rezultat i zhvillimit të modelit të të dhënave relacionale është gjuha SQL (Structured Query Language), e cila aktualisht është shumë e përhapur dhe në fakt është bërë gjuha standarde bazat e të dhënave relacionale. Standard SQL u lëshua nga Instituti Kombëtar i Standardeve Amerikane (ANSI) në 1986, dhe në 1987 Organizata Ndërkombëtare e Standardeve (ISO) e miratoi atë si gjuhë ndërkombëtare. Standardi aktual SQL njihet si SQL/92.

Me përdorimin e çdo standardi, shoqërohen jo vetëm avantazhe të shumta dhe mjaft të dukshme, por edhe disavantazhe të caktuara. Para së gjithash, standardet drejtojnë zhvillimin e industrisë përkatëse në një drejtim të caktuar; në rastin e gjuhës SQL, ekzistenca e parimeve të forta themelore çon, në fund të fundit, në pajtueshmërinë e zbatimeve të ndryshme të saj dhe kontribuon si në rritjen e transportueshmërisë së softuerit dhe bazave të të dhënave në përgjithësi, ashtu edhe në shkathtësinë e punës së administratorëve të bazës së të dhënave. Nga ana tjetër, standardet kufizojnë fleksibilitetin dhe funksionalitetin e një zbatimi të caktuar. Nën zbatimi i gjuhës SQL i referohet produktit softuer SQL të prodhuesit përkatës. Për të zgjeruar funksionalitetin, shtohen shumë zhvillues të bazuar në standarde gjuha standarde SQL shtesa të ndryshme. Duhet të theksohet se standardet kërkojnë çdo të plotësuar zbatime gjuhësore SQL ka karakteristika të caktuara dhe pasqyron gjerësisht tendencat kryesore që jo vetëm çojnë në ndërveprim midis të gjitha implementimeve konkurruese, por gjithashtu kontribuojnë në vlerën e programuesve dhe përdoruesve të SQL bazat e të dhënave relacionale në tregun e sotëm të softuerit.

Të gjitha specifike zbatime gjuhësore disi të ndryshme nga njëra-tjetra. Është në interesin më të mirë të prodhuesve të sigurojnë që zbatimet e tyre përmbushin standardet aktuale ANSI për transportueshmërinë dhe përvojën e përdoruesit. Megjithatë, çdo zbatim i SQL përmban përmirësime për të përmbushur nevojat e një serveri të caktuar të bazës së të dhënave. Këto përmirësime ose zgjerime të gjuhës SQL janë komanda dhe opsione shtesë që janë shtesa në paketën standarde dhe janë të disponueshme në këtë zbatim të veçantë.

Aktualisht, gjuha SQL mbështetet nga shumë dhjetëra DBMS të llojeve të ndryshme, të dizajnuara për një shumëllojshmëri të gjerë platformash kompjuterike, duke filluar nga kompjuterët personalë te kompjuterët kryesorë.

Të gjitha gjuhët e manipulimit të të dhënave janë krijuar për shumë DBMS para ardhjes së bazat e të dhënave relacionale, u fokusuan në operacionet me të dhëna të përfaqësuara si regjistrime logjike të skedarëve. Natyrisht, kjo kërkonte që përdoruesi të kishte një njohuri të hollësishme për organizimin e ruajtjes së të dhënave dhe përpjekje serioze për të treguar se cilat të dhëna nevojiten, ku ndodhen dhe si t'i merrni ato.

Gjuha e konsideruar SQL fokusohet në operacionet me të dhëna të paraqitura në formën e grupeve logjikisht të ndërlidhura të tabelave të relacioneve. Tipari më i rëndësishëm i strukturave të tij është përqendrimi në rezultatin përfundimtar të përpunimit të të dhënave dhe jo në procedurën e këtij përpunimi. Gjuha SQL vetë përcakton se ku ndodhen të dhënat, indeksohen dhe madje se cila sekuencë më efikase e operacioneve duhet të përdoret për të marrë një rezultat, dhe për këtë arsye nuk është e nevojshme të specifikohen këto detaje në një pyetje të bazës së të dhënave.

Hyrje në teknologjinë klient-server

Në lidhje me zgjerimin e tregut të shërbimeve të informacionit, prodhuesit e softuerëve filluan të prodhojnë gjithnjë e më shumë sisteme softuerike inteligjente, dhe për rrjedhojë në shkallë të gjerë. Shumë organizata dhe përdorues individualë shpesh nuk ishin në gjendje të strehonin produktet e blera në kompjuterët e tyre. Për shkëmbimin e informacionit dhe shpërndarjen e tij, u krijuan rrjete kompjuterike dhe filluan të instalohen programe dhe të dhëna përgjithësuese në serverë të veçantë skedarësh.

Falë DBMS që punon me serverët e skedarëve, shumë përdorues kanë akses në të njëjtat baza të të dhënave. Zhvillimi i sistemeve të ndryshme të automatizuara për menaxhimin e organizatave është duke u thjeshtuar. Sidoqoftë, me këtë qasje, i gjithë përpunimi i kërkesave nga programet ose nga terminalet e kompjuterëve të përdoruesve kryhet në to, prandaj, për të zbatuar qoftë edhe një kërkesë të thjeshtë, është e nevojshme të lexoni nga serveri i skedarëve ose të shkruani skedarë të tërë në të, dhe kjo çon në situata konflikti dhe mbingarkesë të rrjetit. Për të eliminuar këto mangësi, u propozua teknologji klient-server, por në të njëjtën kohë, nevojitej një gjuhë e vetme për të komunikuar me serverin - zgjedhja ra në SQL.

Teknologji klient-server nënkupton një mënyrë të tillë të ndërveprimit ndërmjet komponentëve të softuerit, në të cilin ata formojnë një sistem të vetëm. Siç nënkupton edhe emri, ekziston një proces i caktuar klienti që kërkon burime të caktuara, si dhe procesi i serverit që siguron këto burime. Nuk është e nevojshme që ata të jenë në të njëjtin kompjuter. Është e zakonshme që serveri të vendoset në një nyje në rrjetin lokal dhe klientët në nyje të tjera.

Në kontekstin e një baze të dhënash, klienti menaxhon ndërfaqen e përdoruesit dhe logjikën e aplikacionit, duke vepruar si një stacion pune që drejton aplikacionet e bazës së të dhënave. Klienti merr një kërkesë nga përdoruesi, kontrollon sintaksën dhe gjeneron një pyetje në bazën e të dhënave në SQL ose në një gjuhë tjetër të bazës së të dhënave që përputhet me logjikën e aplikacionit. Më pas dërgon një mesazh te serveri, pret për një përgjigje dhe formaton të dhënat e marra për prezantim tek përdoruesi. Serveri merr dhe përpunon pyetje në bazën e të dhënave dhe më pas i dërgon rezultatet përsëri te klienti. Një përpunim i tillë përfshin kontrollimin e kredencialeve të klientit, zbatimin e kërkesave të integritetit dhe kërkimin dhe përditësimin e të dhënave. Ai gjithashtu mbështet menaxhimin e konkurencës dhe rikuperimit.

Arkitektura klient-server ka një sërë përparësish.

Artikujt kryesorë të lidhur