Interogare SQL pentru a crea exemple de tabel. Cum se creează o bază de date în mediul SQL Server

1 vot

Bun venit pe site-ul meu blog. Astăzi vom vorbi despre interogări SQL pentru începători. Unii webmasteri pot avea o întrebare. De ce să înveți SQL? Nu este posibil să treci?

Se pare că acest lucru nu va fi suficient pentru a crea un proiect profesional de internet. Sql este folosit pentru a lucra cu baze de date și pentru a crea aplicații pentru WordPress. Să ne uităm la modul de utilizare a interogărilor mai detaliat.

Ce este

SQL - limbaj interogări structurate. Conceput pentru a determina tipul de date, pentru a oferi acces la acestea și pentru a procesa informații în perioade scurte de timp. Descrie componentele sau unele rezultate pe care doriți să le vedeți în proiectul pe Internet.

Pentru a spune simplu, acest limbaj de programare vă permite să adăugați, să modificați, să căutați și să afișați informații în baza de date. Popularitatea mysql se datorează faptului că este folosit pentru a crea proiecte dinamice pe Internet, a căror bază este o bază de date. Prin urmare, pentru a dezvolta un blog funcțional, trebuie să înveți această limbă.

Ce poate face

Limbajul sql vă permite să:

  • creați tabele;
  • schimbare pentru a primi și stoca diverse date;
  • combina informațiile în blocuri;
  • protejarea datelor;
  • creați cereri în acces.

Important! Odată ce înțelegi sql, poți scrie aplicații pentru WordPress de orice complexitate.

Ce structură

Baza de date este formată din tabele care pot fi prezentate ca fișier Excel.

Are un nume, coloane și un rând cu câteva informații. Puteți crea astfel de tabele prin ajutor sql cereri.

Ce trebuie sa stii


Puncte cheie pentru a învăța Sql

După cum s-a menționat mai sus, interogările sunt folosite pentru procesare și introducere informație nouăîntr-o bază de date formată din tabele. Fiecare linie este o intrare separată. Deci, să creăm o bază de date. Pentru a face acest lucru, scrieți comanda:

Creați baza de date „bazaname”

Scriem numele bazei de date în latină între ghilimele. Încercați să găsiți un nume clar pentru el. Nu creați o bază de date precum „111”, „www” și altele asemenea.

După crearea bazei de date, instalați:

SETĂ NUMELE „utf-8”

Acest lucru este necesar pentru ca conținutul de pe site să fie afișat corect.

Acum să creăm un tabel:

CREATE TABLE 'bazaname' . 'masa' (

id INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,

log VARCHAR(10),

trece VARCHAR(10),

data DATE

În a doua linie am scris trei atribute. Să vedem ce înseamnă:

  • Atributul NOT NULL înseamnă că celula nu va fi goală (câmpul este obligatoriu);
  • Valoarea AUTO_INCREMENT este auto-completare;
  • PRIMARY KEY - cheie primară.

Cum să adăugați informații

Pentru a completa câmpurile tabelului creat cu valori, se folosește instrucțiunea INSERT. Scriem următoarele linii de cod:

INSERT INTO 'tabel'

(autentificare, trecere, dată) VALUES

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

În paranteze indicăm numele coloanelor, iar în următorul - valorile.

Important! Mențineți consistența în numele și valorile coloanelor.

Cum se actualizează informațiile

Pentru a face acest lucru, utilizați comanda UPDATE. Să vedem cum să schimbi parola pentru un anumit utilizator. Scriem următoarele linii de cod:

UPDATE 'tabel' SET pass = '12345678' WHERE id = '1'

Acum schimbați parola „12345678”. Modificările apar în linia cu „id”=1. Dacă nu scrieți comanda WHERE, toate liniile se vor schimba, nu una anume.

Vă recomand să cumpărați cartea" SQL pentru manechin " Cu ajutorul acestuia, puteți lucra profesional cu baza de date pas cu pas. Toate informațiile sunt structurate după principiul de la simplu la complex și vor fi bine percepute.

Cum se șterge o intrare

Dacă ați scris ceva greșit, corectați-l folosind comanda DELETE. Funcționează la fel ca UPDATE. Scriem următorul cod:

ȘTERGEȚI DIN „tabel” WHERE id = „1”

Informații de eșantionare

Pentru a prelua valori din baza de date, utilizați comanda SELECT. Scriem următorul cod:

SELECTAȚI * DIN „tabel” WHERE id = „1”

ÎN în acest exempluÎn tabel, selectați toate câmpurile disponibile. Acest lucru se întâmplă dacă introduceți un asterisc „*” în comandă. Dacă trebuie să selectați o valoare eșantion, scrieți aceasta:

SELECT jurnal, trece FROM tabel WHERE id = '1'

Trebuie remarcat faptul că capacitatea de a lucra cu baze de date nu va fi suficientă. Pentru a crea un proiect profesional de internet, va trebui să înveți cum să adaugi date dintr-o bază de date în pagini. Pentru a face acest lucru, familiarizați-vă cu limbajul de programare web PHP. Te va ajuta cu asta curs misto de Mihail Rusakov .


Ștergerea unui tabel

Apare folosind o solicitare DROP. Pentru a face acest lucru, vom scrie următoarele rânduri:

CĂDERE BRUSCA masa TABLE;

Afișarea unei înregistrări dintr-un tabel pe baza unei anumite condiții

Luați în considerare acest cod:

SELECT ID, țara, orașul FROM tabelul WHERE persoane>150000000

Acesta va afișa înregistrări ale țărilor cu o populație de peste o sută cincizeci de milioane.

O asociere

Este posibil să legați mai multe tabele împreună folosind Join. Vedeți cum funcționează mai detaliat în acest videoclip:

PHP și MySQL

Încă o dată vreau să subliniez că solicitările la crearea unui proiect pe Internet sunt obișnuite. Pentru a le utiliza în documente PHP, urmați următorul algoritm:

  • Conectați-vă la baza de date folosind comanda mysql_connect();
  • Folosind mysql_select_db() selectăm baza de date dorită;
  • Procesăm cererea folosind mysql_fetch_array();
  • Închideți conexiunea cu comanda mysql_close().

Important! Lucrul cu o bază de date nu este dificil. Principalul lucru este să scrieți corect cererea.

Webmasterii începători se vor gândi la asta. Ce ar trebui să citești pe această temă? Aș dori să recomand cartea lui Martin Graber " SQL pentru simpli muritori " Este scris în așa fel încât începătorii să înțeleagă totul. Folosește-l ca o carte de referință.

Dar aceasta este o teorie. Cum funcționează acest lucru în practică? În realitate, un proiect pe Internet nu trebuie doar creat, ci și adus în TOPul Google și Yandex. Cursul video vă va ajuta cu acest lucru „ Crearea si promovarea site-ului web ».


Instrucțiuni video

Mai ai întrebări? Urmărește videoclipul online pentru mai multe detalii.

Concluzie

Deci, a afla cum să scrieți interogări SQL nu este atât de dificil pe cât pare, dar orice webmaster trebuie să facă acest lucru. Cursurile video descrise mai sus vă vor ajuta în acest sens. Aboneaza-te la grupul meu VKontakte pentru a fi primul care află când apar noi informații interesante.

Deci, ne-am familiarizat cu tipurile de date, acum vom îmbunătăți tabelele pentru forumul nostru. Să ne uităm mai întâi la ele. Și să începem cu tabelul utilizatorilor. Avem 4 coloane în el:

Id_user sunt valori întregi, ceea ce înseamnă că tipul va fi int, să-l limităm la 10 caractere - int (10).
Nume - valoare șir varchar, să-l limităm la 20 de caractere - varchar(20).
email este o valoare de șir varchar, să o limităm la 50 de caractere - varchar(50).
parola este o valoare de șir varchar, o vom limita la 15 caractere - varchar(15).

Toate valorile câmpurilor sunt obligatorii, ceea ce înseamnă că trebuie să adăugați tipul NOT NULL.

Id_user int (10) NOT NULL
nume varchar(20) NOT NULL
email varchar(50) NOT NULL

Prima coloană, așa cum vă amintiți din model conceptual baza noastră de date, este cheia primară (adică valorile sale sunt unice și identifică în mod unic înregistrarea). Este posibil să monitorizați unicitatea pe cont propriu, dar nu este rațional. Există un atribut special în SQL pentru asta - INCREMENT AUTO, care, la accesarea tabelului pentru a adăuga date, calculează valoarea maximă a acestei coloane, crește valoarea rezultată cu 1 și o introduce în coloană. Astfel, în această coloană este generat automat un număr unic și, prin urmare, tipul NOT NULL este redundant. Deci, să atribuim un atribut coloanei cu cheia primară:


nume varchar(20) NOT NULL
email varchar(50) NOT NULL
parola varchar(15) NOT NULL

Acum trebuie să specificăm că câmpul id_user este cheia primară. Pentru a face acest lucru în SQL folosim cuvânt cheie CHEIA PRINCIPALA(), numele este indicat între paranteze câmp cheie. Să facem modificări:

Id_user int (10) AUTO_INCREMENT
nume varchar(20) NOT NULL
email varchar(50) NOT NULL
parola varchar(15) NOT NULL
CHEIE PRIMARĂ (id_user)

Deci, tabelul este gata, iar versiunea sa finală arată astfel:

Creați utilizatori de tabel (
id_user int (10) AUTO_INCREMENT,
nume varchar(20) NOT NULL,
email varchar(50) NOT NULL,
parola varchar(15) NOT NULL,
CHEIE PRIMARĂ (id_user)
);

Acum să ne uităm la al doilea tabel - subiecte. Argumentând în mod similar, avem următoarele câmpuri:



id_author int (10) NOT NULL
CHEIE PRIMARĂ (id_topic)

Dar în modelul nostru de bază de date, câmpul id_author este o cheie străină, adică. poate avea doar valorile care se află în câmpul id_user din tabelul utilizatori. Pentru a indica acest lucru în SQL există un cuvânt cheie CHEIE EXTERNĂ(), care are următoarea sintaxă:

CHEIE STRĂINĂ (nume_coloană_care_este_cheie_străină) REFERINȚE parent_table_name (parent_column_name);

Să indicăm că id_author este o cheie străină:

Id_topic int (10) AUTO_INCREMENT
nume_subiect varchar(100) NOT NULL
id_author int (10) NOT NULL
CHEIE PRIMARĂ (id_topic)
CHEIE STRĂINĂ (id_author) REFERINȚE utilizatori (id_user)

Tabelul este gata, iar versiunea sa finală arată astfel:

Creați subiecte de tabel (
id_topic int (10) AUTO_INCREMENT,
topic_name varchar(100) NOT NULL,

CHEIE PRIMARĂ (id_topic),
CHEIE STRĂINĂ (id_author) REFERINȚE utilizatori (id_user)
);

Ultimul tabel rămas este posturile. Totul este similar aici, doar două chei externe:

Creați postări pentru tabel (
id_post int (10) AUTO_INCREMENT,
textul mesajului NOT NULL,
id_author int (10) NOT NULL,
id_topic int (10) NU NULL,
CHEIE PRIMARĂ (id_post),
CHEIE STRĂINĂ (id_author) REFERINȚE utilizatori (id_user),
CHEIE STRĂINĂ (id_topic) REFERINȚE subiecte (id_topic)
);

Vă rugăm să rețineți că un tabel poate avea mai multe chei străine, dar în MySQL nu poate exista decât o singură cheie primară. În prima lecție am șters baza de date a forumului, este timpul să o creăm din nou.

Hai să lansăm Server MySQL(Start - Programe - MySQL - My SQL Server 5.1 - Comanda MySQL Line Client), introduceți parola, creați un forum de bază de date (creați un forum de bază de date;), selectați-l pentru utilizare (utilizați forumul;) și creați cele trei tabele ale noastre:

Vă rugăm să rețineți că o comandă poate fi scrisă pe mai multe rânduri folosind tasta Enter (MySQL înlocuiește automat simbolul linie nouă->), și numai după apăsarea separatorului (punct și virgulă). Introduceți cheile duce la executarea cererii.

Amintiți-vă, dacă ați greșit ceva, puteți oricând să aruncați un tabel sau întreaga bază de date folosind instrucțiunea DROP. Repara ceva Linie de comanda extrem de incomod, așa că uneori (mai ales în etapa inițială) este mai ușor să scrieți interogări într-un editor, de exemplu, Notepad, apoi să le copiați și să le lipiți într-o fereastră neagră.

Deci, tabelele sunt create, pentru a ne asigura de acest lucru, să ne amintim de echipă arata tabele:

Și, în sfârșit, să ne uităm la structura ultimului nostru tabel de postări:

Acum, semnificațiile tuturor câmpurilor structurii devin clare, cu excepția câmpului DEFAULT. Acesta este câmpul de valoare implicit. Am putea specifica o valoare implicită pentru o coloană (sau pentru toate). De exemplu, dacă am avea un câmp numit „Căsătorit” și tastam ENUM („da”, „nu”), atunci ar fi logic să facem una dintre valori valoarea implicită. Sintaxa ar fi:

Married enumeration ("da", "nu") NOT NULL implicit ("da")

Acestea. acest cuvânt cheie este scris separat de un spațiu după tipul de date, iar valoarea implicită este indicată în paranteze.

Dar să revenim la mesele noastre. Acum trebuie să introducem date în tabelele noastre. Pe site-uri, de obicei introduceți informații în niște formulare html, apoi un script într-o limbă oarecare (php, java...) extrage aceste date din formular și le introduce în baza de date. El face acest lucru printr-o interogare SQL pentru a introduce date în baza de date. Încă nu știm cum să scriem scripturi în PHP, dar acum vom învăța cum să trimitem interogări SQL pentru a introduce date.

În acest scop este utilizat operatorul INTRODUCE. Există două tipuri de sintaxă pe care le puteți utiliza. Prima opțiune este folosită pentru a introduce date în toate câmpurile tabelului:

INSERT INTO table_name VALUES ("prima_valoare_coloană","a doua_valoare_coloană", ..., "ultima_valoare_coloană");


Să încercăm să adăugăm următoarele valori la tabelul de utilizatori:

INSERT INTO users VALUES ("1","sergey", " [email protected]", "1111");

A doua opțiune este folosită pentru a introduce date în unele câmpuri ale tabelului:

INSERT INTO table_name ("nume_coloană", "nume_coloană") VALUES ("first_column_value","a doua_coloană_valoare");


În tabelul nostru de utilizatori, toate câmpurile sunt obligatorii, dar primul nostru câmp are cuvântul cheie AUTO_INCREMENT (adică este completat automat), așa că putem sări peste această coloană:

INSERT INTO utilizatori (nume, e-mail, parola) VALORI ("valera", " [email protected]", "2222");

Dacă am avea câmpuri cu tipul NULL, i.e. opțional, le-am putea ignora și pe acestea. Dar dacă încercați să lăsați un câmp cu valoarea NOT NULL gol, serverul va afișa un mesaj de eroare și nu va finaliza cererea. În plus, la introducerea datelor, serverul verifică relațiile dintre tabele. Prin urmare, nu veți putea adăuga o valoare unui câmp care este o cheie străină care nu există în tabelul aferent. Veți verifica acest lucru introducând date în celelalte două tabele.

Dar mai întâi, să adăugăm informații despre câțiva utilizatori. Pentru a adăuga mai multe rânduri simultan, trebuie doar să enumerați parantezele cu valori separate prin virgule:

Acum să introducem datele în al doilea tabel - subiecte. Totul este la fel, dar trebuie să ne amintim că valorile din câmpul id_author trebuie să fie prezente în tabelul utilizatorilor:

Acum să încercăm să adăugăm un alt subiect, dar cu id_author, care nu este în tabelul utilizatori (deoarece am adăugat doar 5 utilizatori la tabelul utilizatori, atunci id=6 nu există):

Serverul aruncă o eroare și spune că nu poate intra pe o astfel de linie pentru că un câmp care este o cheie străină conține o valoare care nu se află în tabelul de utilizatori aferent.

Acum să adăugăm câteva rânduri la tabelul de postări, amintindu-ne că avem 2 chei străine în el, adică. id_author și id_topic, pe care le vom introduce, trebuie să fie prezente în tabelele asociate acestora:

Deci avem 3 tabele care au date în ele. Apare întrebarea - cum să vedeți ce date sunt stocate în tabele. Aceasta este ceea ce vom face în lecția următoare.

Până în acest moment, am interogat tabele de date și am executat comenzi pentru a prelua acele date, presupunând că acele tabele au fost deja create de cineva înaintea noastră. Aceasta este într-adevăr situația cea mai realistă când Nu un numar mare de oamenii creează tabele care sunt apoi folosite de alte persoane. Scopul nostru este să acoperim mai întâi informațiile pe scară largă și apoi să trecem la probleme mai specifice.

În acest capitol, vom discuta despre crearea, modificarea și ștergerea tabelelor. Toate acestea se aplică tabelelor în sine, și nu datelor pe care le conțin. Indiferent dacă efectuați sau nu aceste operațiuni singur, o înțelegere conceptuală a acestora vă va crește înțelegerea limbajului SQL și a naturii tabelelor pe care le utilizați. Acest capitol ne introduce într-o zonă a SQL numită DDL (Data Definition Language), în care sunt create obiecte. date SQL.

Acest capitol va arăta și un alt tip de obiect de date SQL - Index. Indecii sunt folosiți pentru a face căutarea mai eficientă și, uneori, pentru a face ca valorile să difere unele de altele. De obicei funcționează fără ca tu să observi, dar dacă încerci să pui valori într-un tabel și sunt respinse pentru că nu sunt unice, înseamnă că un alt rând are aceeași valoare pentru acel câmp și că acel câmp are un index unic sau o constrângere care îi dictează unicitatea. Discuțiile de mai sus vor continua în capitolul 18.

COMANDA DE CREARE TABEL

Tabelele sunt create cu comanda CREATE TABLE. Această comandă creează un tabel gol - un tabel fără rânduri. Valorile sunt introduse folosind comanda DML INSERT (vezi capitolul 15). Comanda CREATE TABLE definește practic tabele prin descrierea unui set de nume de coloane specificate într-o anumită ordine. De asemenea, definește tipurile de date și dimensiunile coloanelor. Fiecare tabel trebuie să aibă cel puțin o coloană.

Sintaxa comenzii CREATE TABLE: CREATE TABLE ( [()], [()] ...); După cum sa discutat în Capitolul 2, tipurile de date variază semnificativ de la program la program. Pentru a fi compatibile cu standardul, toate trebuie să accepte cel puțin standardul de tip ANSI. Este descris în Anexa B.

Pentru că spațiile sunt folosite pentru a separa părțile Comenzi SQL, nu pot face parte din numele tabelului (sau orice alt obiect, cum ar fi un index). Litera de subliniere (_) este folosită în mod obișnuit pentru a separa cuvintele din numele tabelelor.

Valoarea argumentului dimensiune depinde de tipul de date. Dacă nu o specificați, sistemul dumneavoastră va atribui automat valoarea. Pentru valori numerice, Acest - cea mai bună cale de ieșire deoarece în acest caz, toate podelele dumneavoastră de acest tip vor primi aceeași dimensiune, ceea ce vă scutește de problemele de compatibilitate generală a acestora (vezi capitolul 14). De asemenea, utilizarea argumentului dimensiune cu unele seturi numerice nu este chiar o chestiune simplă. Dacă trebuie să depozitați un număr mare, va trebui, fără îndoială, să vă asigurați că podeaua este suficient de mare pentru a le găzdui.

unu tip de date căruia, practic, ar trebui să îi atribuiți dimensiunea este CHAR. Argumentul dimensiune este un număr întreg care specifică numărul maxim de caractere pe care câmpul le poate deține. De fapt, numărul de caractere din câmp poate fi de la zero (dacă câmpul este NULL) până la acest număr. În mod implicit, argumentul dimensiune este 1, ceea ce înseamnă că câmpul poate conține doar o literă. Desigur, acest lucru nu este exact ceea ce îți dorești.

Tabelele aparțin utilizatorului care le-a creat, iar numele tuturor tabelelor îi aparțin acestui utilizator trebuie să fie diferite unele de altele, precum și numele tuturor coloanelor dintr-un tabel dat. Mese separate poate utiliza aceleasi nume coloane, chiar dacă aparțin aceluiași utilizator. Un exemplu în acest sens este coloana oraș din tabelul Clienți și din tabelul Vânzători. Utilizatorii care nu sunt proprietari de tabel se pot referi la aceste tabele folosind numele proprietarului tabelului urmat de un punct; de exemplu, tabelul de angajați creat de Smith se va numi Smith.Angajați atunci când este menționat de alt utilizator (înțelegem că Smith este identificatorul de permisiune (ID). (ID) raportat de utilizator (ID-ul rezolvat este numele dvs. în SQL. Această ieșire este discutată în Capitolul 2 și va fi continuată în Capitolul 22).

Această comandă va crea tabelul Salepeople: CREATE TABLE Saleepeople (snum integer, sname char (10), city char (10), comm declmal); Ordinea coloanelor din tabel este determinată de ordinea în care sunt listate. Coloana nu trebuie separată printr-o întrerupere de linie (ceea ce se face pentru lizibilitate), ci separată prin virgule.

INDICI

Un index este o listă ordonată (alfabetică sau numerică) de coloane sau grupuri de coloane dintr-un tabel. Tabelele pot avea un număr mare de rânduri și, deoarece rândurile nu sunt în niciunul într-o anumită ordine, căutarea acestora folosind valoarea specificată poate dura timp. Adresa indexului este atât o preocupare, cât și, în același timp, oferă o modalitate de a grupa toate valorile în grupuri de unul sau mai multe șiruri care sunt diferite unul de celălalt. În capitolul 18, vom descrie o modalitate mai directă de a vă forța valorile să fie unice. Dar această metodă nu există la început versiuni SQL. Deoarece unicitatea este adesea necesară, în acest scop au fost utilizați indici.

Indicii sunt un instrument SQL pe care piața însăși a dat naștere, nu ANSI. Prin urmare, standardul ANSI în sine nu acceptă în prezent indecși, deși aceștia sunt foarte folositori și utilizați pe scară largă.

Când creați un index pe un câmp, baza de date își amintește ordinea corespunzătoare a tuturor valorilor acelui câmp într-o zonă de memorie. Să presupunem că tabelul nostru Client are mii de intrări și doriți să găsiți un client cu număr = 2999. Deoarece rândurile nu sunt ordonate, programul dumneavoastră va parcurge întregul tabel, rând cu rând, verificând de fiecare dată când valoarea câmpului cnum este egală cu valoarea 2999. Totuși, dacă a existat un index pe câmpul cnum, atunci programul ar putea ajunge la numărul 2999 direct din index și să ofere informații despre cum să găsiți rândul corect de tabel.

În timp ce un index îmbunătățește foarte mult eficiența interogării, utilizarea unui index face operațiunile de modificare DML (cum ar fi INSERT și DELETE) oarecum mai lente, iar indexul în sine ocupă multă memorie. Prin urmare, de fiecare dată când creați un tabel trebuie să luați o decizie dacă îl indexați sau nu. Indecșii pot consta din mai multe câmpuri. Dacă sunt specificate mai multe câmpuri pentru același index, al doilea este ordonat în primul, al treilea în al doilea și așa mai departe. Dacă ai avea numele și prenumele în două câmpuri diferite dintr-un tabel, ai putea crea un index care ar sorta câmpul anterior în următorul. Acest lucru se poate face indiferent de modul în care au fost aranjate coloanele din tabel.

Sintaxa pentru crearea unui index este de obicei următoarea (rețineți că acesta nu este un standard ANSI): CREATE INDEX PE

( [,]...); Tabelul, desigur, trebuie deja creat și trebuie să conțină coloane. Indexul nu poate fi folosit pentru nimic altceva din baza de date (de către orice utilizator). Odată creat, indexul va fi invizibil pentru utilizator. SQL însuși decide când este necesar să se refere la el și o face automat. Dacă, de exemplu, tabelul Clienți ar fi cel mai frecvent tabel referit în interogările vânzătorilor către propria clientelă, ar fi adecvat să se creeze un astfel de index în câmpul snum al tabelului Clienți.

CREATE INDEX Clientgroup ON Clienți (snum); Acum, vanzatorul care are legatura cu aceasta masa isi va putea gasi foarte repede propria clientela.

Din fericire, indicele din exemplul anterior nu trebuie să fie unic, în ciuda observației noastre că acesta este unul dintre scopurile indicelui. Un anumit vânzător poate avea orice număr de clienți. Totuși, acest lucru nu se va întâmpla dacă folosim cuvântul cheie UNIQUE înainte de cuvântul cheie INDEX. Câmpul cnum, ca cheie primară, va fi primul candidat pentru un index unic: CREATE UNIQUE INDEX Custid ON Customers (cnum); NOTĂ: această comandă va fi respinsă dacă există deja valori identice în câmpul cnum. Cel mai bun mod a se ocupa de indici este să-i creați imediat după crearea tabelului și înainte de introducerea oricăror valori. De asemenea, rețineți că, pentru un indice unic de mai mult de un gen, este o combinație de valori, fiecare dintre acestea putând să nu fie unică.

Exemplul anterior este o modalitate indirectă de a face câmpul cnum să acționeze ca cheie primară a tabelului Customers. Bazele de date acționează mai direct asupra cheilor primare și a altor chei. Vom discuta această constatare în continuare în capitolele 18 și .

ȘTERGEREA INDICILOR

Principalul atribut al unui index este că este numit - deci poate fi șters. De obicei, utilizatorii nu sunt conștienți de existența indexului. SQL determină automat dacă utilizatorului i se permite să folosească indexul și, dacă da, permite utilizarea acestuia. Cu toate acestea, dacă doriți să ștergeți un index, trebuie să îl cunoașteți după el. Această sintaxă este folosită pentru a elimina un index: DROP INDEX ; Eliminarea unui index nu afectează conținutul câmpurilor.

SCHIMBAREA UNUI TABEL DUPĂ CE A FOST CREAT

Comanda ALTER TABLE nu face parte din standardul ANSI; dar este o formă accesibilă pe scară largă și destul de semnificativă, deși capabilitățile sale sunt oarecum limitate. Este folosit pentru a modifica definiția unui tabel existent. De obicei, adaugă coloane la un tabel. Uneori poate elimina sau redimensiona coloanele, iar în unele programe, poate adăuga sau elimina constrângeri (discutat în Capitolul 18). Sintaxa tipică pentru adăugarea unei coloane la un tabel este: ALTER TABLE
ADĂUGA ; Coloana va fi adăugată cu o valoare NULL pentru toate rândurile din tabel. Noua coloană va deveni ultima coloană din tabel. De fapt, puteți adăuga mai multe coloane noi deodată, separate prin virgule, într-o singură comandă. Este posibil să ștergeți sau să schimbați coloanele. Cel mai adesea, schimbarea unei coloane poate fi pur și simplu creșterea dimensiunii acesteia sau adăugarea/eliminarea unei constrângeri. Sistemul dvs. trebuie să se asigure că orice modificări nu intră în conflict cu datele existente - de exemplu, dacă încercați să adăugați o constrângere la o coloană care avea deja o valoare, dacă este încălcată, constrângerea va fi respinsă. Cel mai bine verificați acest lucru. Cel puțin, verificați documentația sistemului pentru a vedea dacă garantează că aceasta a fost cauza. Datorită naturii non-standard a comenzii ALTER TABLE, mai trebuie să vă uitați la secțiunea din documentația sistemului dumneavoastră care vorbește despre cazuri speciale.

ALTER TABLE - nu are efect atunci când tabelul trebuie redefinit, dar ar trebui să vă proiectați baza de date pentru a evita să vă bazați prea mult pe ea pentru a face acest lucru, dacă este posibil. Schimbarea structurii unui tabel atunci când acesta este deja în uz este periculoasă! Priviți cu atenție tabelele care, fiind tabele secundare cu date extrase dintr-un alt tabel (vezi Capitolul 20), nu funcționează corect mult timp, iar programele care folosesc SQL imbricat (Capitolul 25) nu se execută corect sau nu sunt întotdeauna corecte. În plus, modificarea poate șterge toți utilizatorii care au permisiunea de a accesa tabelul. Din aceste motive, ar trebui să vă proiectați tabelele pentru a utiliza ALTER TABLE doar ca ultimă soluție.

Dacă sistemul dvs. nu acceptă ALTER TABLE sau dacă doriți să evitați utilizarea acestuia, puteți pur și simplu să creați masa noua, Cu modificările necesare atunci când creați și utilizați comanda INSERT cu o interogare SELECT * pentru a rescrie în ea datele din tabelul vechi.

Utilizatorii cărora li sa acordat acces la tabelul vechi (vezi Capitolul 22) trebuie să li se acorde acces la tabelul nou.

Trebuie să fiți proprietarul (adică creatorul) tabelului pentru a-l putea șterge. Deci, nu vă faceți griji cu privire la distrugerea accidentală a datelor dvs., SQL vă va cere mai întâi să curățați tabelul înainte de a-l șterge din baza de date. Un tabel cu rânduri nu poate fi șters. Consultați Capitolul 15 pentru detalii despre cum să ștergeți rânduri dintr-un tabel. Sintaxa pentru eliminarea tabelului, presupunând că este gol, desigur, este următoarea: DROP TABLE< table name >; Când această comandă este dată, tabelul nu mai este recunoscut de ea și nu există o astfel de comandă care ar putea fi dată acestui obiect. Trebuie să vă asigurați că acest tabel nu este referit printr-o cheie străină la un alt tabel (Cheile străine sunt discutate în Capitolul 19) și că nu este utilizat în definiția unei Vizualizări (Capitolul 20).

Această comandă nu face parte de fapt din standardul ANSI, dar este în general acceptată și utilă. Din fericire, este mai simplu și, prin urmare, mai consistent decât ALTER TABLE. ANSI pur și simplu nu are o modalitate de a detecta tabele rupte sau nevalide.

REZUMAT

Acum sunteți fluent în elementele de bază ale definițiilor datelor. Puteți crea, modifica și șterge tabele. În timp ce doar prima dintre aceste funcții face parte din standardul oficial SQL, altele se vor schimba din când în când, în special ALTER TABLE. DROP TABLE vă permite să scăpați de mesele care sunt inutile. Ea doar distruge mese goale, și, prin urmare, nu distruge datele.

Acum știți despre indecși și cum să le creați și să le ștergeți. SQL nu vă oferă prea mult control asupra acestora, deoarece implementarea pe care o utilizați face o treabă destul de bună de a determina cât de repede sunt executate diverse comenzi. Indecșii sunt unul dintre instrumentele care vă oferă posibilitatea de a influența direct eficacitatea comenzilor dvs. SQL. Am discutat aici despre indici pentru a le distinge de constrângeri, cu care nu trebuie confundați. Constrângerile sunt subiectul capitolului 18 și al capitolului 19.

LUCRU CU SQL

1. Scrieți o instrucțiune CREATE TABLE care ar afișa tabelul Client.

2. Scrieți o comandă care să permită utilizatorului să recupereze rapid comenzile grupate după date din tabelul Comenzi.

3. Dacă tabelul Order a fost deja creat, cum puteți forța câmpul onum să fie unic (presupunând că toate valorile curente sunt unice)?

4. Creați un index care să permită fiecărui vânzător să-și găsească rapid comenzile grupate după dată.

5. Presupunând că fiecare vânzător are un singur client cu un anumit rating, introduceți comanda care îl va prelua.

Introducere

Să continuăm să studiem interogare SQL ov la baza de date. Astăzi, una dintre interogările simple SQL este interogarea SQL pentru a crea un tabel de bază de date. Interogarea rulează pe baza instrucțiunii CREATE TABLE.

Crearea unui tabel de bază de date

Există o instrucțiune sql care este folosită pentru a crea tabele de baze de date. Instrucțiune: CREATE TABLE.

Rețineți că un tabel al bazei de date relaționale trebuie să aibă unic:

  • Nume unic;
  • Coloane (atribute);
  • Cheia principala.
  • Rânduri (înregistrări);

Pentru început, creăm doar un tabel și nu îl completăm cu date.

Intr-o maniera pozitiva, forma generala mese cu nume unice rândurile și coloanele sunt specificate în timpul creării. De exemplu, vom crea un tabel simplu de bază de date și vom face fără un model conceptual.

În acest articol, vom crea un tabel de bază de date cu clienții. Cumpărătorii sunt luați ca exemplu.

Cum este identificat cumpărătorul? Decidem ca fiecare client să fie identificat prin următoarele date:

  • Nume de familie;
  • Log in;
  • Parola;
  • E-mail;
  • telefon.

Amintiți-vă că în tabel trebuie să specificați .

Pentru a crea un tabel de bază de date, folosim instrucțiunea sql CREATE TABLE.

Sintaxa operatorului este:

CREAȚI TABEL nume tabel (coloana 1, tip coloană (spațiu) opțiune coloană (spațiu), coloana 2, tip coloană (spațiu) opțiune coloană (spațiu), coloana 3, tip coloană (spațiu) opțiune coloană (spațiu), etc.)

În versiunea noastră, numele tabelului este: clienți. Oferim denumiri coloanelor de date despre clienți:

  • Nume: să fie client_client;
  • Nume: client_subclient;
  • Autentificare: client_login;
  • Parola: client_parola;
  • email: client_mail;
  • Telefon: client_telefon.

Ne gândim ce tip de date vor fi stocate în aceste coloane și selectăm tipurile de date CHAR (lungimea câmpului este constantă) sau VARCHAR (lungimea câmpului este variabilă). În cazul nostru, tipul de date VARCHAR este potrivit.

Acordăm o atenție deosebită cheii primare. Să facem ca ID-ul cumpărătorului cheia principală. În parametrii cheie precizăm că aceasta este o cheie primară, nu poate fi zero, iar pentru următoarea înregistrare se mărește cu unu. Ultima proprietate se numește autoincrement. Ne uităm la indiciu din cartea de referință (link de mai sus) și obținem o coloană cu o cheie primară:

Client_id număr întreg nu cheie primară auto_increment nulă

Scrierea unei interogări SQL pentru a crea un tabel de bază de date

Însumăm toate datele sursă și obținem următoarea interogare SQL:

/*Clienți de tabel de utilizator*/ creează clienți de tabel (/*client_id va fi cheia primară (neapărat un număr întreg) cu incrementare automată (+1), care nu va fi niciodată egal cu zero*/ client_id integer not null auto_increment cheie primară, client_customer varchar(13), /*nume */ client_surclient varchar(22), /*nume */ client_login varchar(21), /*login*/ client_passwd varchar(7), / *parola*/ client_email varchar(44) /*email*/ client_telefon varchar(26) /*telephone*/);

Notă: Creăm o interogare SQL pentru a crea un tabel în editor de text ca Notepad++. Între paranteze limităm lungimea câmpului, acesta poate fi de la 1 la 255.

Rezumatul articolului

  • În acest articol l-am întâlnit pe primul Declarație SQL Limbajul CREATE TABLE
  • Am creat o interogare SQL pentru a crea un (primul) tabel de bază de date cu o cheie primară.

Pentru asta vei avea nevoie sistem instalat managementul bazei de date (DBMS) DB2. Vom folosi dialectul limbajului SQL care este folosit în acest DBMS special.

Prima comandă pe care o vom folosi pentru a crea o bază de date este comanda CREATE DATABASE. Sintaxa sa este următoarea:

CREATE TABLE TABLE_NAME (tip de date first_column_name, ..., last_column_name tip de date, cheie primară, constrângeri (opțional))

Deoarece baza noastră de date modelează o rețea de farmacii, aceasta conține entități precum „Farmacie” (tabelul Farmacie în exemplul nostru de creare a unei baze de date), „Medicament” (tabelul de pregătire în exemplul nostru de creare a unei baze de date), „Disponibilitate (de medicamente în farmacie)” (Tabelul de disponibilitate în exemplul nostru de creare a unei baze de date), „Client” (tabelul Client în exemplul nostru de creare a unei baze de date) și altele, pe care le vom analiza în detaliu aici.

Mai mult de un articol ar putea fi dedicat dezvoltării modelului entitate-relație, dar dacă suntem interesați în primul rând de comenzile SQL pentru crearea unei baze de date și a tabelelor în ea, atunci vom fi de acord să presupunem că conexiunile dintre entități sunt deja clare pentru S.U.A. Figura de mai jos arată o reprezentare a modelului nostru de bază de date cu atribute ale entităților (tabele) și relații dintre tabele.

Pentru a mări imaginea, puteți da clic pe ea cu butonul stâng al mouse-ului.

După cum sa menționat, exemplul de creare a bazei de date discutat aici a folosit o variantă a limbajului SQL care este utilizat în sistemul de management al bazei de date (DBMS) DB2. Este insensibilă la majuscule, adică nu contează dacă comenzile și cuvintele individuale din ele sunt tastate cu litere mici sau mari. Pentru a ilustra această caracteristică, comenzile sunt date fără un sistem special, tastate cu litere mici și majuscule.

Acum să începem să creăm echipe. Prima noastră comandă SQL creează baza de date PHARMNETWORK:

Cod SQL

CREAȚI BAZĂ DE DATE PHARMNETWORK

Descrierea tabelului FARMACIE:

Scriem o comandă care creează tabelul PHARMACY (Farmacie), valorile cheii primare PH_ID sunt generate automat de la 1 cu un pas de 1, se face o verificare pentru a se asigura că valorile atributului Adresă în acest tabelele sunt unice:

Cod SQL

CREATE TABLE PHARMACY(PH_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), Adresa varchar(40) NU NULL, CHEIE PRIMARĂ(PH_ID), CONSTRAINT PH_UNIQ UNIQUE(Adresă))

Descrierea tabelului GROUP:

Scriem o comandă care creează un grup de tabel (Grup de medicamente), valorile cheii primare GR_ID sunt generate automat de la 1 cu un pas de 1, se verifică unicitatea numelui grupului (cuvântul cheie CONSTRAINT este folosit pentru acest):

Cod SQL

CREATE TABLE GROUP(GR_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), Nume varchar(40) NU NULL, CHEIE PRIMARĂ(GR_ID), CONSTRAINT GR_UNIQ UNIQUE(Nume))

Descrierea tabelului de PREPARARE:

O comandă care creează un tabel PREPARARE, valorile cheii primare PR_ID sunt generate automat de la 1 în trepte de 1, se determină că valorile cheii externe GR_ID (Grupul de medicamente) nu pot accepta Valoare NULL, este definită o verificare a unicității valorilor atributelor Nume:

Cod SQL

CREATE TABLE PREPARATION(PR_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), Name varchar(40) NOT NULL, GR_ID int NOT NULL, PRIMARY KEY(PR_ID), constrângere PR_UNIQ UNIQUE(Nume))

În continuare, trebuie să avem grijă de constrângerile de integritate. Acest lucru este foarte convenabil de făcut folosind comanda alter table. Această comandă este studiată la clasă SQL ALTER TABLE - schimbarea unui tabel al bazei de date.

Acum este momentul să creați tabelul DISPONIBILITATE (Disponibilitatea sau Disponibilitatea medicamentului în farmacie). Descrierea ei:

Scriem o comandă care creează tabelul DISPONIBILITATE. Sunt specificate datele de început (nu poate fi NULL) și de sfârșit (null implicit).

Cod SQL

CREATE TABLE DISPONIBILITATE(A_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), PH_ID INT NU NULL, PR_ID INT NU NULL, DateStart varchar(20) NOT NULL, DateEnd varchar(20) DEFAULT NULL, QUANTITY NOT NULL, MART varchar(3) DEFAULT NULL, PRIMARY KEY(A_ID), CONSTRAINT AVA_UNIQ UNIQUE(PH_ID, PR_ID))

Creăm o masă DEFICIT (Lipsa de medicamente în farmacie, adică o cerere nesatisfăcută). Descrierea ei:

Scriem o comandă care creează tabelul DEFICIT:

Cod SQL

CREATE TABLE DEFICIT(D_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), PH_ID INT NU NULL, PR_ID INT NU NULL, Solution varchar(40) NOT NULL, DateStart varchar(20) NOT NULL, DateEnd varchar (20) DEFAULT NULL)

A mai lasat putin. Am ajuns deja la comanda care creează tabelul Employee. Descrierea ei:

Scriem o comandă care creează tabelul Employee, cu o cheie primară generată după aceleași reguli ca și cheile primare ale tabelelor anterioare în care acestea există. Cheia străină PH_ID Angajatul este asociat cu PHARMACY (Farmacie):

Cod SQL

CREATE TABLE EMPLOYEE(E_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), F_Name varchar(40) NOT NULL, L_Name varchar(40) NOT NULL, POST varchar(40) NOT NULL, PH_ID INT NU NULL , CHEIE PRIMARĂ(E_ID))

Turnul a ajuns la crearea mesei CLIENT. Descrierea ei:

Scriem o comandă care creează un tabel CLIENT (Client), pentru a cărui cheie primară este adevărată descrierea anterioară. Particularitatea acestui tabel este că atributele sale F_Name și L_Name au valoarea implicită NULL. Acest lucru se datorează faptului că clienții pot fi fie înregistrați, fie neînregistrați. U ultimele valori numele și prenumele vor fi nedefinite (adică NULL):

Cod SQL

CREATE TABLE CLIENT(C_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), FName varchar(40) DEFAULT NULL, LName varchar(40) DEFAULT NULL, DateReg varchar(20), PRIMARY KEY(C_ID))

Penultimul tabel din baza noastră de date este tabelul BASKET. Descrierea ei:

Scriem o comandă care creează un tabel BASKET (Coș de cumpărături), tot cu o cheie primară unică și incrementabilă și legat prin chei străine C_ID și E_ID cu Clientul și respectiv Angajatul:

Cod SQL

CREATE TABLE BASKET(BS_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), C_ID INT NU NULL, E_ID INT NU NULL, CHEIE PRIMARĂ(BS_ID))

Și, în sfârșit, ultimul tabel din baza noastră de date este tabelul CUMPĂRARE. Descrierea ei:

Numele domeniului Tip de date Descriere
B_IDsmallintNumărul de identificare a achiziției
PH_IDsmallintNumărul de identificare a farmaciei
PR_IDsmallintNumărul de identificare al medicamentului
BS_IDvarchar(40)Numărul de identificare a coșului de cumpărături
Prețvarchar(20)Preț
Datavarchar(20)Data

Scriem o comandă care creează tabelul CUMPĂRARE, tot cu o cheie primară unică și incrementabilă și asociată chei externe BS_ID, PH_ID, PR_ID cu coș de cumpărături, farmacie și, respectiv, medicament:

Cod SQL

CREATE TABLE BUYING(B_ID smallint NOT NULL GENERAT ÎNTOTDEAUNA CA IDENTITATE (ÎNCEPE CU 1, INCREMENTĂ CU 1), BS_ID INT NU NULL, PH_ID INT NU NULL, PR_ID INT NU NULL, DateB varchar(20) NU NULL, Preț dublu NU NULL, CHEIE PRIMARĂ(B_ID))

Și doar pentru a încheia subiectul creării unei baze de date, digresiunea promisă privind respectarea constrângerilor de integritate atunci când soluția este mai complexă decât scrierea unei comenzi. În exemplul nostru, trebuie îndeplinită următoarea condiție: la achiziționarea unei unități de medicament, valoarea cantității acestui medicament din tabelul DISPONIBILITATE ar trebui să scadă corespunzător. În general, pentru astfel de operațiuni în Limbajul SQL Există instrumente speciale numite declanșatoare. Dar declanșatorii sunt un lucru capricios: în practică, este posibil să nu funcționeze sau să nu funcționeze conform intenției. Prin urmare, ori de câte ori este posibil, dezvoltatorii caută instrumente software pentru rezolvarea unor astfel de probleme, un exemplu dintre care este menționat în acest paragraf.