Acasă - Serviciu
Definiția constrângerii de integritate. Crearea cheilor primare Tipuri de date numerice fracționale

constrângere PRIMARY KEY

O CHEIE PRIMARĂ este o constrângere de integritate la nivel de coloană - un set de reguli acceptate - care marchează în mod oficial o coloană sau un grup de coloane ca un identificator unic pentru fiecare rând dintr-un tabel.

Dacă ați venit la Firebird din sisteme de baze de date care acceptă conceptul de „index primar” pentru determinarea cheilor (de obicei sisteme bazate pe fișiere, cum ar fi Paradox, Access și MySQL), atunci Firebird și lumea standardelor SQL vă sunt familiare. Cheia primară nu este un index, ci o constrângere. Una dintre regulile unei astfel de constrângeri este că constrângerea trebuie să aibă un index unic specific de unul sau mai multe elemente nevide asociate cu ea.

Simpla creare a unui astfel de index nu creează o cheie primară. Cu toate acestea, crearea unei constrângeri de cheie primară are ca rezultat crearea indexului necesar constând din coloanele listate în declarația de constrângere.

ATENŢIE! Nu este nevoie să importați un „index primar” existent dintr-un sistem bazat pe fișiere vechi sau să creați un astfel de index în timp ce așteptați ca o constrângere a cheii primare să fie declarată. Firebird nu poate impune o constrângere de cheie primară peste un index existent - cel puțin în versiunile existente, inclusiv 1.5 - și optimizatorul de interogări nu va funcționa corect atunci când indexurile sunt duplicate.

Un tabel poate avea o singură cheie primară. Când definiți o constrângere, Firebird creează automat indexul necesar folosind o varietate de reguli numite. Numele de index ale cheilor primare sunt discutate mai jos.

ATENŢIE! Dacă convertiți o bază de date în Firebird din orice altă sursă decât InterBase sau Oracle, atunci trebuie să acordați o atenție deosebită schemei referitoare la numele și constrângerile cheilor primare.

Deși constrângerea PRIMARY KEY în sine nu este o constrângere de referință, este de obicei o parte obligatorie a oricărei constrângeri de referință, fiind un subiect potențial al clauzei REFERENCES a constrângerii FOREIGN KEY. Consultați capitolul 17 pentru detalii.

Selectarea cheii primare

Identificarea coloanelor ca candidați cheie primare depășește domeniul de aplicare al acestei publicații. Au fost scrise multe cărți excelente despre normalizare, despre procesul de reducere a redundanței și repetarea grupurilor în seturi de date și despre identificarea corectă a elementului care reprezintă unic un singur rând dintr-un tabel. Dacă sunteți nou în bazele de date relaționale, costul învățării unei cărți bune despre modelarea datelor nu va fi prea mare.

Un candidat cu cheie primară, care poate fi o singură coloană sau un grup de coloane, are două cerințe necesare.

* Atributul NOT NULL trebuie declarat pentru toate coloanele dintr-un grup de una sau mai multe coloane. Integritatea cheii poate fi atinsă doar prin compararea valorilor, iar NULL nu este o valoare.

* O coloană sau un grup de coloane trebuie să fie unic - adică mai mult de un rând cu aceleași valori nu pot apărea în tabel. De exemplu, un permis de conducere sau un număr de securitate socială pot fi considerați candidați, deoarece sunt generate de sisteme care nu permit numere duplicate.

La aceste „atitudini” teoretice trebuie adăugată o a treia.

* Dimensiunea totală a cheilor candidate trebuie să fie de 252 de octeți sau mai puțin. Nu este doar o chestiune de numărare a caracterelor. Această limită trebuie redusă - în unele cazuri radical - dacă există mai multe coloane, o secvență de colare non-binară sau un set de caractere pe mai mulți octeți.

Cât de mult vă pot pregăti datele reale pentru eșec

Folosind tabelul bazei de date employee.fdb EMPLOYEE din directorul /examples din directorul rădăcină Firebird (employee.gdb în versiunea 1.0.x), să ne uităm la modul în care datele din lumea reală pot determina ipotezele tale teoretice despre unicitate să fie greșite. Iată o declarație care arată datele semnificative stocate în acest tabel:

CREAȚI ANGAJAT DE MASĂ (

FIRST_NAME VARCHAR(15) NOT NULL,

/* presupunere: angajatul trebuie să aibă un nume */

LAST_NAME VARCHAR(20) NOT NULL,

/* presupunere: angajatul trebuie să aibă un nume de familie */

PHONE_EXT VARCHAR(4),

HIRE_DATE DATE DEFAULT CURRENT_DATE NOT NULL,

DEPT_NO CHAR(3) NOT NULL,

JOB_CODE VARCHAR (5) NOT NULL,

JOB_GRADE SMALLINT NOT NULL,

JOB_COUNTRY VARCHAR(15) NOT NULL,

SALARIU NUMERIC (15, 2) IMPLICIT 0 NU NUL,

FULL_NAME CALCULAT DE FIRST_NAME || || NUME) ;

De fapt, această structură nu are chei candidate. Nu este posibil să se identifice un singur rând de angajat folosind (FIRST_NAME, LAST_NAME) ca cheie deoarece combinația celor două elemente are o probabilitate medie spre mare de a fi duplicată în cadrul organizației. Nu vom putea salva înregistrările a doi angajați pe nume John Smith.

Pentru a obține cheile trebuie să inventați ceva. Acest „ceva” este un mecanism cunoscut sub numele de cheie surogat.

Chei surogat

Am tratat deja cheia surogat în subiectul introductiv despre chei din Capitolul 14. O cheie primară surogat este o valoare care este garantată a fi unică și nu are conținut semantic și este folosită ca o cheie surogat într-o structură de tabel care nu poate oferi o cheie surogat. cheia candidatului în propria sa structură. Din acest motiv, EMP_NO este adăugat la tabelul EMPLOYEE (declarat prin intermediul domeniului) pentru a acționa ca o cheie surogat:

CREATE DOMENIU EMPNO SMALLINT ;

ANGAJAT ALTER TABLE

ADD EMP_NO EMPNO NOT NULL,

ADAUGĂ CONSTRAINTĂ PK_EMPLOYEE

CHEIE PRIMARĂ(EMP_NU) ;

Această bază de date conține, de asemenea, un generator numit EMP_NO_GEN și un declanșator Before insert numit SET_EMP_NO pe tabelul EMPLOYEE pentru a prelua valoarea unei chei date atunci când este adăugat un nou rând. În Sect. „Implementarea cheilor de auto-incrementare” din capitolul 31 descrie această tehnică în detaliu. Aceasta este modalitatea recomandată de implementare a cheilor surogat în Firebird.

Poate doriți să luați în considerare beneficiile utilizării unei chei primare surogat nu numai în cazul în care tabelul nu poate oferi un candidat, ci și în cazurile în care candidatul dvs. cheie este compus.

Chei primare compuse

Când analizați date, uneori puteți găsi o singură coloană unică într-o structură de date. Teoria este de a găsi două sau mai multe coloane grupate împreună ca o cheie care va garanta unicitatea rândului. Când multe coloane sunt combinate pentru a forma o cheie, cheia se numește cheie compusă sau uneori cheie complexă.

Dacă aveți experiență cu sisteme de baze de date precum Paradox, care foloseau chei compuse pentru a implementa relații ierarhice, s-ar putea să vă fie greu să vă imaginați că trăiți fără ele. Până acum, în practică, cheile compuse ar trebui considerate foarte limitate în SGBD-uri precum Firebird, care nu traversează structurile fizice de index pe disc pentru a implementa relații.

Nu este nevoie de indici compoziți în Firebird și, în plus, indecșii compoziți pun unele probleme de design și performanță pentru tabele mari.

* Cheile compozite sunt de obicei alcătuite din elemente cheie non-atomice, de ex. coloanele selectate au sens (sunt „date semnificative”) și sunt cu siguranță vulnerabile la modificări externe și erori de introducere manuală.

* Cheile externe din alte tabele care fac referire la acest tabel vor duplica fiecare element al cheii compuse. Integritatea referenţială este compromisă atunci când se utilizează chei non-atomice. Combinația de elemente non-atomice crește riscul.

* Cheile externe, ca și cheile primare, au indecși constanti. Indicii compoziți au restricții de dimensiune mai stricte decât indecșii cu o singură coloană.

* Indicii compoziți tind să fie mari. Indecșii mari folosesc mai multe pagini de baze de date, ceea ce face ca operațiunile de indexare (sortare, alăturare și comparare) să fie mai lente decât este necesar.

Atomicitatea coloanelor cheie primară

Este o practică bună să nu includeți coloane care au semnificație ca date în cheile primare și externe. Acest lucru încalcă unul dintre principiile de bază ale proiectării bazelor de date relaționale - atomicitatea. Principiul atomicității cere ca fiecare element de date să existe în întregime pe cont propriu, cu o singură regulă internă care îi guvernează existența.

Pentru ca o cheie primară să fie atomică, trebuie să fii dincolo de deciziile umane. Dacă oamenii îl compun sau îl clasifică, nu este atomic. Dacă este supus oricărei alte reguli decât NOT NULL și cerințele de unicitate, nu este atomic. În exemplul de mai sus, chiar și un permis de conducere sau un număr de securitate socială nu îndeplinește cerințele de atomicitate pentru o cheie primară, deoarece acestea sunt subiecte ale sistemelor externe.

Sintaxa declarației cheii primare

Puteți utiliza mai multe opțiuni de sintaxă pentru a atribui o constrângere PRIMARY KEY unei coloane sau unui grup de coloane. Toate coloanele care sunt elemente ale cheii primare trebuie să fie predefinite cu atributul NOT NULL. Deoarece nu puteți adăuga o constrângere NOT NULL la o coloană după ce a fost creată, trebuie să aveți grijă de această constrângere înainte de a utiliza alte constrângeri.

Constrângerea PRIMARY KEY poate fi aplicată în oricare dintre următoarele faze ale creării metadatelor:

* într-o definiție de coloană într-o instrucțiune CREATE TABLE sau ALTER TABLE ca parte a definiției coloanei;

* într-o definiție de tabel într-o instrucțiune CREATE TABLE sau ALTER TABLE ca o constrângere de tabel definită separat.

Definirea unei chei primare ca parte a definiției unei coloane

Următoarea secvență creează și comite un domeniu care nu poate fi anulat, apoi definește o coloană de cheie primară bazată pe acel domeniu și, simultan, aplică o constrângere PRIMARY KEY acelei coloane:

CREATE DOMENIU D_IDENTITY CA BIGINT NU NULL;

CREAȚI PERSOANE DE TABEL (

PERSON_ID D_IDENTITY CHEIE PRIMARĂ,

Firebird creează o constrângere de tabel numită INTEG_M și un index numit RDB$PRIMARYnn. (pl în fiecare caz este numărul obținut de la generator. Cele două numere nu sunt legate între ele.) Nu puteți influența care sunt aceste nume și nu le puteți schimba.

Rezultatul va fi similar dacă utilizați aceeași abordare atunci când adăugați o coloană, folosind instrucțiunea ALTER TABLE și creând cheia primară într-o singură instrucțiune:

ALTER TABLE CARTE

ADĂUGAȚI BOOK_ID D_IDENTITY CHEIE PRIMARĂ;

Definirea unei chei primare ca o constrângere numită

O altă modalitate de a defini o cheie primară într-o definiție de tabel este să adăugați o declarație de constrângere la sfârșitul definițiilor coloanei. Declarațiile de constrângeri sunt plasate pe ultimul loc deoarece depind de existența coloanelor la care se referă. Această metodă vă oferă posibilitatea de a numi constrângeri. Următoarea declarație denumește constrângerea cheii primare ca PK_ATABLE:

CREATE TABLE TABLE (

ID BIGINT NU NUL,

ANOTHER_COLUMN VARCHAR(20),

CONSTRAINT PK_ATABLE PRIMARY KEY(ID));

Acum, în loc să folosească numele generat de sistem RDB$PRIMARYnnn, Firebird folosește PK_ATABLE ca nume al acestei constrângeri. În Firebird 1.5 și versiunile ulterioare, acesta aplică, de asemenea, un nume de constrângere definit de utilizator pentru indexul unic de suport. În acest exemplu, indexul va fi numit PK_ATABLE, când în alte versiuni numele său ar fi RDB$PRIMARYnnn.

Firebird 1.5 vă permite, de asemenea, să utilizați nume definite de utilizator pentru constrângere și indexul care o acceptă.

Folosind un index personalizat

Înainte de Firebird 1.5, nu era posibil să se folosească un index descendent pentru a suporta o cheie primară. Începând cu versiunea 1.5, este posibil să se mențină o cheie primară cu un index descendent. Pentru a face acest lucru, Firebird 1.5 adaugă o extensie de sintaxă sub forma unei clauze USING care vă permite să creați un index ASC (crescător) sau DESC (descendent) și să îi dați un alt nume decât numele constrângerii.

AS c și DESC determină direcția de căutare. Acest concept este discutat mai detaliat în capitolul 18.

Următoarea instrucțiune va crea o constrângere a cheii primare numită PK ATEST și un index descendent suport numit IDX_PK_ATEST:

CREATE TABLE TEST (

ID BIGINT NU NUL,

DATA VARCHAR(10));

ALTER TABLE TEST

ADĂUGAȚI CONSTRAINTĂ CHEIE PRIMARĂ PK_ATEST(ID)

UTILIZAREA DESC INDEX IDX_PK_ATEST;

O sintaxă alternativă va funcționa și:

CREATE TABLE TEST (

ID BIGINT NU NUL,

DATA VARCHAR(10),

CONSTRAINT PK_ATEST CHEIE PRIMARĂ(ID)

UTILIZAREA DESC INDEX IDX PK ATEST;

ATENŢIE! Dacă creați un index DESCENDING pe o constrângere de cheie primară sau unică, trebuie să specificați USING DESC INDEX pentru toate cheile externe care fac referire la el.

Adăugați o cheie primară la un tabel existent

Adăugarea la tabelul de constrângeri poate fi amânată. Este o practică comună în rândul dezvoltatorilor să-și definească toate tabelele fără constrângeri de tabel și apoi să le adauge folosind un script separat. Motivul principal pentru această practică: scripturile mari eșuează adesea pentru că autorii uită de unele dependențe. Pur și simplu va fi mai puțin o durere de cap dacă creați baza de date într-o secvență care reduce timpul și frustrarea de a remedia erorile de dependență și de a rula din nou scripturi.

De obicei, în primul script declarăm tabelele și confirmăm crearea lor:

CREATE TABLE TABLE (

ID BIGINT NU NUL,

ANOTHER_COLUMN VARCHAR(20),

< другие столбцы >) ;

CREAȚI TABEL UN ALLT TABEL (

ALTER TABLE TABLE

ADAUGĂ CONSTRAINTĂ PK_ATABLE

CHEIE PRIMARĂ(ID);

ALTER TABLE UN ALTABEL...

În capitolul următor, când ne uităm la definițiile FOREIGN KEY, beneficiile creării unei baze de date într-o secvență de dependențe de încredere vor deveni evidente.

Din cartea Baze de date: note de curs autor autor necunoscut

3. Constrângerea integrității după stare Constrângerea integrității unui obiect de date relaționale după stare este așa-numitul invariant de date.În acest caz, integritatea trebuie distinsă cu încredere de securitate, ceea ce, la rândul său, implică protecția datelor de

Din cartea Limbajul de programare C# 2005 și platforma .NET 2.0. de Troelsen Andrew

Restricționarea utilizării atributelor În mod implicit, atributele personalizate pot fi aplicate oricărei părți a codului programului (metode, clase, proprietăți etc.). Prin urmare, dacă doar are sens, se poate folosi VehicleDescription pentru a defini (printre altele) metode,

De pe serverul de carte DIY Linux autor

11.2.2. Limitarea accesului Consider că este necesar să aruncăm o privire mai atentă la directiva Limit block. Această directivă definește tipul și parametrii de acces la un anume director. Luați în considerare Lista 11.9.Listingul 11.9. Exemplu de utilizare a directivei Limit

Din cartea Fundamentals of Object-Oriented Programming de Meyer Bertrand

Din cartea Programming in Prolog for Artificial Intelligence autorul Bratko Ivan

Restricționarea accesului clientului Pentru a limita accesul clientului la o anumită componentă h, va fi folosită capacitatea de a include două sau mai multe secțiuni de caracteristici în declarația de clasă. Declarația ar arăta astfel: clasă S2 caracteristicăf ...g ...feature (A, B)h ......endComponents f și g

Din cartea Dublarea vânzărilor într-un magazin online autor Parabellum Andrei Alekseevici

5.1. Limitarea căutării În procesul de atingere a unui obiectiv, sistemul Prolog caută automat prin opțiuni, revenind dacă oricare dintre ele eșuează. Acest tip de căutare este un mecanism software util, deoarece eliberează utilizatorul de a fi nevoit să o facă

Din cartea Firebird DATABASE DEVELOPER'S GHIDE de Borri Helen

Limitare Al doilea element al formulei EDI este termenul limită (din limba engleză) sau restricția. Aceasta poate fi o limită de timp (de exemplu, o reducere de 50% doar pentru două zile) sau o limită de cantitate (de exemplu, un cadou valoros pentru primii 50 de clienți). Mai mult, termenele scurte funcționează

Din cartea Omert@. Un ghid pentru securitatea computerelor și protecția informațiilor pentru șefii mari de Axler Alex

Constrângere de referință O constrângere de referință este implementată ca CHEIE străină. O constrângere de cheie străină există numai în contextul altui tabel și a cheii unice a acelui tabel, fie specificată explicit sau implicit în clauza REFERENCES atunci când constrângerea este declarată.

Din cartea Linux prin ochii unui hacker autor Flenov Mihail Evghenievici

Constrângerea NOT NULL Firebird nu acceptă un atribut de valoare nulă, așa cum fac unele SGBD-uri non-standard. Conform standardelor, toate coloanele din Firebird pot conține o valoare nulă, cu excepția cazului în care este specificată o constrângere explicită NOT NULL.

Din cartea InterBase World. Arhitectura, administrarea si dezvoltarea aplicatiilor de baze de date in InterBase/FireBird/Yaffil autor Kovyazin Alexey Nikolaevici

Din cartea Anonimat și securitate pe Internet. De la „ceainic” la utilizator autor Kolisnichenko Denis Nikolaevici

Din cartea autorului

4.11.5. Limitarea rețelei În rețelele mari, este foarte dificil să descrii fiecare computer. Pentru a ușura această sarcină, puteți utiliza intrări de grup. De exemplu, trebuie să permiteți accesul la Internet numai pentru rețeaua 192.168.1.x (cu o mască de 255.255.255.0). Aceasta înseamnă că primii 24 de biți (primii trei

Din cartea autorului

9.5.8. Limitarea canalului Atunci când organizează accesul la Internet, utilizatorii individuali trebuie adesea să ofere viteze de conectare mai mari. Cum să faci asta când în mod implicit toată lumea este egală și poate lucra la viteza maximă disponibilă în acest moment?

Din cartea autorului

CHECK Constraint Una dintre cele mai utile constrângeri dintr-o bază de date este constrângerea de verificare. Ideea este foarte simplă - verificați valoarea introdusă în tabel pentru o anumită condiție și, în funcție de îndeplinirea condiției, introduceți sau nu introduceți date.

Din cartea autorului

P2.4. Restricţionarea accesului P2.4.1. Interzicerea accesului la un site (sau la o listă de site-uri) Să presupunem că trebuie să blocați accesul la un anumit site (sau la o listă de site-uri). Pentru a face acest lucru, accesați Facturare | Clienți | Filtre | Înaintea grupului (Fig. A2.10). Executați comanda de meniu Acțiune |

Din cartea autorului

P2.4.2. Limita de viteză Pentru a limita viteza unui anumit utilizator, selectați-l în lista de utilizatori, faceți clic dreapta și selectați Proprietăți. Accesați fila Restricții (Fig. A2.14), debifați caseta Implicit din

Cheia primară este un câmp dintr-un tabel care identifică în mod unic fiecare rând/înregistrare dintr-un tabel al bazei de date. Cheile primare trebuie să conțină valori unice. Coloana cheii primare nu poate avea o valoare.

Un tabel poate avea o singură cheie primară, care poate consta din unul sau mai multe câmpuri. Când mai multe câmpuri sunt folosite ca cheie primară, ele sunt numite cheie compusă.

Dacă un tabel are o cheie primară definită pentru orice câmp(e), atunci nu puteți avea două înregistrări care au aceeași valoare pentru acel câmp(e).

Notă– Puteți utiliza aceste concepte atunci când creați tabele de baze de date.

Crearea unei chei primare

Aici este sintaxa pentru a defini atributul ID ca cheie primară în tabelul Clienți.

CREATE TABLE CLIENTS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID));

Pentru a crea o constrângere a cheii primare pe coloana „ID” când tabelul CLIENTI există deja, utilizați următoarea sintaxă SQL:

ALTER TABLE CLIENTS ADAD CHEIE PRIMARĂ (ID);

Notă

Dacă utilizați instrucțiunea ALTER TABLE pentru a adăuga o cheie primară, coloanele cheii primare trebuie să fi fost deja declarate ca neconținând valori NULL (dacă tabelul a fost creat mai întâi).

Pentru a defini o cheie primară pe mai multe coloane, utilizați sintaxa SQL de mai jos:

CREATE TABLE CLIENTS(ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID, NUME));

Pentru a crea o constrângere a cheii primare pe coloanele ID și NAME atunci când tabelul CUSTOMERS există deja, utilizați următoarea sintaxă SQL.

ALTER TABLE CLIENTS ADD CONSTRING PK_CUSTID CHEIE PRIMARĂ (ID, NUME);

Ștergerea unei chei primare

Puteți șterge constrângerile cheii primare dintr-un tabel utilizând sintaxa de mai jos.

ALTER TABLE CLIENȚII PIDĂ CHEIA PRIMARĂ;

Vă prezint atenției o traducere gratuită a articolului SQL for Beginners Part 2

Este important ca fiecare dezvoltator web să poată interacționa cu bazele de date. În a doua parte vom continua să învățăm limba SQLși să ne aplicăm abilitățile în DBMS MySQL. Vom explora indecși, tipuri de date și interogări mai complexe.

De ce ai nevoie

Vă rugăm să consultați secțiunea „De ce aveți nevoie” din prima parte, care se află.

Dacă doriți să rulați aceste exemple pe serverul dvs., faceți următoarele:

  1. Deschide-ți consola MySQLși conectați-vă.
  2. Creați baza de date „my_first_db” folosind interogarea CREA, dacă nu a fost creat anterior.
  3. Schimbați baza folosind operatorul UTILIZARE.

Indici

Indecșii (sau cheile) sunt utilizate în mod obișnuit pentru a îmbunătăți viteza de execuție a instrucțiunilor care selectează date (cum ar fi SELECTAȚI) din tabele.

Ele sunt o parte importantă a unei arhitecturi bune de baze de date; este dificil să le clasificăm drept „optimizare”. De obicei, indecșii sunt adăugați inițial, dar pot fi adăugați ulterior folosind o interogare ALTER TABLE.

Principalele motive pentru indexarea coloanelor bazei de date sunt:

  • Aproape fiecare tabel are o cheie primară ( CHEIA PRINCIPALA), de obicei aceasta este coloana „id”.
  • Dacă o coloană este destinată să stocheze valori unice, trebuie să aibă un index unic ( UNIC).
  • Dacă aveți nevoie de o căutare frecventă pe o coloană (folosind-o într-o propoziție UNDE), trebuie să aibă un index regulat ( INDEX).
  • Dacă o coloană este folosită pentru a se raporta la un alt tabel, ar trebui să fie o cheie străină dacă este posibil ( CHEIE EXTERNĂ) sau un index obișnuit.

Cheie primară (PRIMARY KEY)

Aproape toate tabelele au o cheie primară, de obicei un număr întreg cu o opțiune de incrementare automată ( AUTO_INCREMET).

Subinterogările cauzează adesea o degradare semnificativă a performanței, așa că utilizați-le cu precauție.

UNION: Combinarea datelor

Folosind interogare UNIUNE, puteți combina rezultatele mai multor interogări SELECT.

Acest exemplu combină stări care încep cu litera „N” cu state cu populații mai mari:

(SELECT * FROM indică WHERE nume LIKE „n%”) UNION (SELECT * FROM indică WHERE populație > 10000000);

Vă rugăm să rețineți că New York este un stat mare și începe cu litera „N”. Cu toate acestea, apare o singură dată în listă, pentru că duplicatele sunt eliminate automat.

De asemenea, frumusețea cererilor UNIUNE este că pot fi folosite pentru a combina interogări pe diferite tabele.

De exemplu, avem mese angajați (angajați), manageri (manageri) și clienți (clienți). Fiecare tabel are un câmp cu o adresă de e-mail. Dacă dorim să obținem toate adresele de e-mail într-o singură solicitare, putem face următoarele:

(SELECT email FROM angajati) UNION (SELECT email FROM managers) UNION (SELECT email FROM customers WHERE subscris = 1);

Prin completarea acestei solicitări, vom primi adresele de corespondență ale tuturor angajaților și managerilor, și numai ale acelor clienți care sunt abonați la lista de corespondență.

INSERT Continuare

Am vorbit deja despre cerere INTRODUCEîn articolul precedent. Acum că ne-am uitat la indecși, putem vorbi despre capabilități suplimentare de interogare INTRODUCE.

INSERT... LA ACTUALIZAREA CHEIEI DUPLICATE

Aceasta este condiția cea mai frecvent utilizată. Mai întâi cererea încearcă să se execute INTRODUCEși dacă cererea eșuează din cauza unui duplicat principal ( CHEIA PRINCIPALA) sau unic ( CHEIE UNICA), atunci cererea este executată ACTUALIZAȚI.

Să creăm mai întâi un tabel de testare.

Aceasta este o masă de depozitare a alimentelor. Câmpul „stoc” stochează numărul de produse disponibile în stoc.

Acum să încercăm să inserăm o valoare existentă în tabel și să vedem ce se întâmplă.

Am primit o eroare.

Să presupunem că am primit o brutărie nouă și dorim să actualizăm baza de date, dar nu știm dacă există deja o intrare în baza de date. Putem verifica mai întâi existența înregistrării și apoi rulăm o altă interogare de inserare. Sau puteți face totul într-o singură interogare simplă:

Funcționează la fel ca INTRODUCE, dar cu o caracteristică importantă. Dacă înregistrarea există deja, aceasta este ștearsă și apoi interogarea este executată INTRODUCE, și nu vom primi niciun mesaj de eroare.

Vă rugăm să rețineți, pentru că este inserat un rând complet nou, câmpul de autoincrement este mărit cu unu.

Aceasta este o modalitate de a preveni apariția erorilor de duplicare în primul rând pentru a menține aplicația în funcțiune. Poate fi necesar să inserați o nouă linie fără a imprima erori, chiar dacă există o duplicare.

Nu există erori sau linii actualizate.

Tipuri de date

Fiecare coloană dintr-un tabel trebuie să fie de un tip specific. Am folosit deja tipuri INT, VARCHARȘi DATA, dar nu s-a oprit asupra lor în detaliu. De asemenea, ne vom uita la câteva tipuri de date suplimentare.

Să începem cu tipurile de date numerice. Le împart în două grupe: numere întregi și fracții.

Întreg

O coloană cu numere întregi poate stoca doar numere naturale (fără virgulă zecimală). În mod implicit, acestea pot fi pozitive sau negative. Dacă opțiunea este selectată NESEMNAT, atunci pot fi stocate numai numere pozitive.

MySQL acceptă 5 tipuri de numere întregi de diferite dimensiuni și intervale:

Tipuri de date numerice fracționale

Aceste tipuri pot stoca numere fracționale: FLOAT, DOUBLE și DECIMAL.

FLOAT are 4 octeți, DOUBLE are 8 octeți și este similar cu cel precedent. DOUBLE este mai precis.

DECIMAL(M,N) are precizie variabilă. M este numărul maxim de cifre, N este numărul de cifre după virgulă zecimală.

De exemplu, DECIMAL(13,4) are 9 zecimale și 4 zecimale.

Tipuri de date șir

Puteți ghici din nume că pot stoca șiruri.

CHAR(N) poate stoca N caractere și are o valoare fixă. De exemplu, CHAR(50) trebuie să conțină întotdeauna 50 de caractere pe rând în întreaga coloană. Valoarea maximă posibilă este de 255 de caractere

VARCHAR(N) funcționează la fel, dar intervalul poate varia. N - denotă valoarea maximă. Dacă șirul stocat este mai scurt de N caractere, atunci va ocupa mai puțin spațiu pe hard disk. Valoarea maximă posibilă este de 65535 caractere.

Variantele de tip TEXT sunt mai potrivite pentru șiruri lungi. TEXT are o limită de 65535 de caractere, MEDIUMTEXT are o limită de 16,7 milioane și LONGTEXT are o limită de 4,3 miliarde de caractere. MySQL le stochează de obicei în depozite separate de pe server, astfel încât stocarea principală să fie cât mai mică și rapidă posibil.

.

Concluzie

Mulțumesc că ai citit articolul. SQL este un limbaj și un instrument important în arsenalul unui dezvoltator web.

Ultima actualizare: 27.04.2019

Cheile externe vă permit să stabiliți relații între tabele. O cheie externă este setată pe coloanele dintr-un tabel dependent, subordonat și indică către una dintre coloanele din tabelul principal. De obicei, o cheie străină indică o cheie primară dintr-un tabel principal asociat.

Sintaxa generală pentru setarea unei chei externe la nivel de tabel este:

CHEIE străină (coloana1, coloana2, ... coloanaN) REFERINȚE tabel_principal (coloana_tabel_principal1, coloana_tabel_principal2, ... coloana_tabel_principalN)

Pentru a crea o constrângere de cheie externă, după FOREIGN KEY specificați coloana tabelului care va reprezenta cheia externă. Iar după cuvântul cheie REFERENCES se indică numele tabelului aferent, iar apoi între paranteze numele coloanei aferente către care va indica cheia externă. După expresia REFERENCES există expresiile ON DELETE și ON UPDATE, care specifică acțiunea la ștergerea și, respectiv, actualizarea unui rând din tabelul principal.

De exemplu, să definim două tabele și să le legăm folosind o cheie străină:

CREATE TABLE Clienți (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, Prenume VARCHAR(20) NOT NULL, Nume VARCHAR(20) NOT NULL, Telefon VARCHAR(20) NOT NULL UNIQUE); CREATE TABLE Orders (Id INT CHEIE PRIMARIA AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id));

În acest caz, sunt definite tabelele Clienți și Comenzi. Clientii este principalul si reprezinta clientul. Comenzile sunt dependente si reprezinta comanda plasata de client. Tabelul Comenzi este legat prin coloana CustomerId la tabelul Customers și la coloana sa Id. Adică, coloana CustomerId este o cheie externă care indică către coloana Id din tabelul Customers.

Puteți utiliza operatorul CONSTRAINT pentru a specifica un nume pentru o constrângere de cheie străină:

CREATE TABLE Comenzi (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINT orders_custonmers_fk FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id));

ON DELETE și ON UPDATE

Folosind instrucțiunile ON DELETE și ON UPDATE, puteți seta acțiunile care se efectuează atunci când un rând aferent este șters sau modificat, respectiv, din tabelul principal. Următoarele opțiuni pot fi utilizate ca acțiune:

    CASCADE: Șterge sau modifică automat rândurile dintr-un tabel dependent atunci când rândurile înrudite din tabelul principal sunt șterse sau modificate.

    SET NULL: Când ștergeți sau actualizați un rând înrudit din tabelul principal, setați coloana cheii externe la NULL. (În acest caz, coloana cheii externe trebuie să accepte setarea NULL)

    RESTRICȚI: Respinge ștergerea sau modificarea rândurilor din tabelul principal dacă există rânduri înrudite în tabelul dependent.

    FĂRĂ ACȚIUNE: la fel ca RESTRICȚI.

    SETARE IMPLICIT: Când ștergeți un rând înrudit din tabelul principal, setează coloana cheii externe la valoarea implicită care este specificată folosind atributul DEFAULT. În ciuda faptului că această opțiune este disponibilă în principiu, motorul InnoDB nu acceptă această expresie.

Ștergere în cascadă

Ștergerea în cascadă vă permite să ștergeți automat toate rândurile asociate din tabelul dependent atunci când ștergeți un rând din tabelul principal. Pentru a face acest lucru, utilizați opțiunea CASCADE:

CREATE TABLE Orders (Id INT CHEIE PRIMARĂ AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id) ON DELETE CASCADE);

Expresia ON UPDATE CASCADE funcționează într-un mod similar. Când modificați valoarea unei chei primare, valoarea cheii străine asociate acesteia se schimbă automat. Cu toate acestea, deoarece cheile primare se schimbă foarte rar și, în general, nu este recomandat să folosiți coloane cu valori modificabile ca chei primare, expresia ON UPDATE este rar folosită în practică.

Setarea NULL

Când setați opțiunea SET NULL pentru o cheie străină, coloana cheii străine trebuie să fie permisă NULL:

CREATE TABLE Comenzi (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERINȚE Clienți (Id) ON DELETE SET NULL);

) ne-am uitat la modul în care este structurată o bază de date relațională (tabulară) și am constatat că elementele principale ale unei baze de date relaționale sunt: ​​tabele, coloane și rânduri, iar în termeni matematici: relații, atribute și tupluri. De asemenea, adesea, rândurile sunt numite înregistrări, coloanele sunt numite coloane, iar intersecția unei înregistrări și a unei coloane se numește celulă.

Este important să rețineți că conținutul rândurilor și numele coloanelor trebuie să fie unice în cadrul aceleiași baze de date.

Tipuri de date în baze de date

Este important să înțelegeți că puteți crea baze de date pentru orice tip de date: texte, date, ore, evenimente, numere. În funcție de tipul de informații, bazele de date relaționale sunt împărțite în tipuri. Fiecare tip de date (atribut) are propria sa denumire:

  • INTEGER - date din numere întregi;
  • FLOAT - date din numere fracționale, așa-numitele date în virgulă mobilă;
  • CHAR, VARCHAR - tipuri de date text (caracter);
  • LOGIC — tip de date logice (da/nu);
  • DATA/TIME - date de timp.

Acestea sunt principalele tipuri de date, dintre care de fapt sunt multe altele. Mai mult, fiecare limbaj de programare are propriul set de atribute de sistem (tipuri de date).

Care este cheia primară și cheia externă a tabelelor bazelor de date relaționale

Cheia principala

Am amintit mai sus: fiecare rând (înregistrare) al bazei de date trebuie să fie unic. Este cheia primară sub formă de seturi de valori specifice care identifică maxim fiecare înregistrare. Poate fi definit diferit. Cheie primară: un set de caracteristici specifice care sunt unice pentru fiecare înregistrare. Cheia primară este desemnată ca cheie primară.

Cheie primară (PK) foarte important pentru fiecare masă. Lasă-mă să explic de ce.

  • Cheia primară nu permite crearea de înregistrări (rânduri) identice în tabel;
  • PK-urile oferă o conexiune logică între tabelele din aceeași bază de date (pentru bazele de date relaționale).

Merită să ne oprim mai în detaliu asupra conexiunii logică dintre tabele.

Cheie externă

Cheie străină, FK pe scurt. Oferă o conexiune logică clară între tabelele unei baze de date.

De exemplu, există două tabele A și B. În tabelul A (pantofi), există o cheie primară: dimensiune, în tabelul B (culoare) ar trebui să existe o coloană numită dimensiune. În acest tabel, „dimensiunea” va fi cheia externă pentru conexiunea logică a tabelelor B și A.

Un exemplu mai complex.

Două tabele de date: Persoane și numere de telefon.

Tabel: Oameni

Tabel: numere de telefon

În tabelul Numere de telefon, PK este unic. FK al acestui tabel este PK al tabelului People. Legătura dintre numerele de telefon și persoane este asigurată de tabelele telefonice FK. Acesta este:

  • Zaitsev are două telefoane;
  • Volkov are două telefoane;
  • Belkin are un singur telefon.
cheie primară și cheie străină

În concluzie, voi adăuga că orice, Managerul bazei de date are capacitatea tehnică de a crea o cheie primară.



 


Citit:



Mini test pentru gândirea tehnică

Mini test pentru gândirea tehnică

Diagnosticarea cuprinzătoare a abilităților generale ale adolescenților în contextul educației de specialitate PARTEA III 3. Diagnosticarea sferei cognitive 3.3. Test...

Trimiteți un anunț pentru vânzarea unui apartament, casă și alte proprietăți imobiliare gratuit Trimiteți un anunț pentru vânzarea rapidă a unei case

Trimiteți un anunț pentru vânzarea unui apartament, casă și alte proprietăți imobiliare gratuit Trimiteți un anunț pentru vânzarea rapidă a unei case

Vânzarea unei locuințe este un proces complex care necesită luarea în considerare a mai multor nuanțe. Pentru a accelera procesul, experții recomandă să apelați la profesioniști. In orice caz...

Câștigând bani din citirea scrisorilor Citirea scrisorilor, dar recompense pentru

Câștigând bani din citirea scrisorilor Citirea scrisorilor, dar recompense pentru

Cel mai simplu mod de a face bani pe internet, de unde poți începe să lucrezi, este să faci bani citind scrisorile publicitare trimise de agenții de publicitate...

Material pe tema: Program de concert „Din toată inima” Emisiune TV din toată inima toate episoadele

Material pe tema: Program de concert

În general, programul a vorbit despre destinele imprevizibile și complexe ale poporului sovietic. Majoritatea telespectatorilor nu și-au putut reține lacrimile când...

feed-image RSS