Cum se utilizează constrângerile cheii străine MySQL

How Use Mysql Foreign Key Constraints



Constrângerea cheii străine este utilizată pentru a crea o relație între două tabele din baza de date MySQL. Este o caracteristică foarte importantă a MySQL să setezi diferite tipuri de restricții pe tabelele aferente. Pentru a defini orice constrângere a cheii străine pentru orice tabel, trebuie să utilizați cheia primară a altui tabel. Cheia primară este o cheie unică pentru un tabel pentru a identifica rândul particular din tabel și atunci când această cheie primară este utilizată într-un alt tabel pentru a stabili o relație de la unu la unu sau de la unul la mulți sau de la mulți la mulți, atunci se numește cheie străină. Caracteristicile cheilor străine și modul în care aceste chei pot fi utilizate în tabelele MySQL sunt prezentate în acest articol.

Caracteristici ale constrângerilor cheii străine:

Unele caracteristici importante ale constrângerii cheii străine sunt explicate mai jos.







  • Tipul de date al cheii străine care este utilizat în tabelul copil trebuie să fie același cu tipul de date al cheii principale care este utilizat în tabelul părinte pentru a face referire la cheia externă.
  • Orice coloană index sau coloane multiple pot fi referite ca o cheie străină numai pentru tabelul InnoDB.
  • Privilegiile referințelor sau cel puțin unul dintre privilegiile instrucțiunilor SELECT, INSERT, UPDATE și DELETE sunt necesare pentru a crea o cheie externă.
  • O cheie străină poate fi creată în două moduri. Unul folosind instrucțiunea CREATE și altul folosind instrucțiunea ALTER.

Condiție preliminară:

Înainte de a crea o constrângere de cheie străină, trebuie să creați o bază de date și un tabel părinte cu cheia primară. Să presupunem că numele bazei de date este „ bibliotecă Și conține două tabele părinte numite „ cărți ' și ' împrumutat '. Faceți o conexiune cu serverul MySQL folosind mysql client și rulați următoarele instrucțiuni SQL pentru a crea baza de date și tabelele.



CREA BAZĂ DE DATE bibliotecă;
UTILIZARE bibliotecă;

CREA MASA cărți(
id INT NU NUL AUTO_INCREMENT ,
titlu varchar (cincizeci) NU NUL ,
autor varchar (cincizeci) NU NUL ,
editor varchar (cincizeci) NU NUL ,
CHEIA PRINCIPALA (id)
) MOTOR = INNODB ;

CREA MASA debitorii(
id VARCHAR (cincizeci) NU NUL ,
Nume varchar (cincizeci) NU NUL ,
abordare varchar (cincizeci) NU NUL ,
e-mail varchar (cincizeci) NU NUL ,
CHEIA PRINCIPALA (id)
) MOTOR = INNODB ;



Definiți constrângerea cheii străine folosind instrucțiunea CREATE

Creați un tabel numit „ book_borrow_info ‘Cu constrângeri de cheie străină prin executarea următoarei instrucțiuni. Aici book_id câmpul este un cheie externă pentru acest tabel și fiecare valoare a acestui câmp trebuie să existe în id câmp de cărți masa. cărți este tabelul părinte și book_borrow_info este masa copilului. Aici sunt stabilite și două restricții cu cheia externă. Acestea sunt ȘTERGE CASCADA și ACTUALIZAȚI CASCADA . Asta înseamnă că, dacă orice cheie primară va elimina sau actualiza din tabela părinte, atunci înregistrările corespunzătoare legate de tabela copil legată de cheia externă vor fi eliminate sau cheia externă va fi actualizată.





CREA MASA book_borrow_info(
împrumut_id VARCHAR (cincizeci),
book_id INT ,
împrumut_dată DATA NU NUL ,
return_date DATA NU NUL ,
stare VARCHAR (cincisprezece) NU NUL ,
INDEX par_ind(book_id),
CHEIA PRINCIPALA (împrumut_id,împrumut_dată),
CHEIE EXTERNĂ (book_id) REFERINȚE cărți(id)
PE ȘTERGE CASCADĂ
PE ACTUALIZAȚI CASCADĂ
) MOTOR = INNODB ;

Acum, rulați următoarele instrucțiuni SQL pentru a insera unele înregistrări în ambele tabele. Prima declarație INSERT va insera patru înregistrări în cărți masa. Cele patru valori ale id câmp de cărți tabelul va fi 1, 2, 3 și 4 pentru atributul de creștere automată. A doua instrucțiune INSERT va insera patru înregistrări în book_borrow_info bazat pe id valoarea cărți masa.



INTRODUCE ÎN cărți VALORI
( NUL , 'Să ucizi o pasăre cântătoare', „Harper Lee”, „Editura Grand Central”),
( NUL , 'O suta de ani de singuratate', „Garcia Marquez”, „Lutfi Ozkok”),
( NUL , „Un pasaj către India”, „Forster, E.M.”, „BBC Hulton Picture Library”),
( NUL , 'Om invizibil', „Ralph Ellison”, „Encyclopædia Britannica, Inc.”);

INTRODUCE ÎN book_borrow_info VALORI
(„123490”, 1, „15.02.2020”, „25-02-2020”, 'Întors'),
(„157643”, 2, „31-03-2020”, „10.03.2020”, 'In asteptarea'),
(„174562”, 4, „04-04-2020”, „24-04-2020”, „Împrumutat”),
(„146788”, 3, „2020-04-10”, „2020-01-20”, „Împrumutat”);

Dacă încercați să inserați o valoare în câmpul cu cheie străină a tabelei copil care nu există în câmpul cu cheie primară din tabelul părinte, atunci MySQL va genera o eroare. Următoarea instrucțiune SQL va genera o eroare deoarece tabelul părinte, cărți nu conține nicio valoare de identificare 10 .

INTRODUCE ÎN book_borrow_info VALORI
(„195684”, 10, „15.04.2020”, „30-04-2020”, 'Întors');

După executarea următoarei instrucțiuni DELETE, când a patra înregistrare va fi eliminată din cărți tabel apoi înregistrările aferente din book_borrow_info tabelul va fi eliminat automat pentru constrângerea cheii externe.

ȘTERGE DIN cărți UNDE id= 4;
SELECTAȚI * din cărți;
SELECTAȚI * din book_borrow_info;

Definiți constrângerea cheii străine folosind instrucțiunea ALTER

La început, introduceți câteva înregistrări în debitorii tabel și acest tabel va fi definit ca tabel părinte în următorul VÂRSTĂ afirmație.

INTRODUCE ÎN debitorii VALORI
(„123490”, „Patrick Wood”, '34 West Street LANCASTER LA14 9ZH ', „[email protected]”),
(„157643”, „Ezra Martin”, '10 The Grove BIRMINGHAM B98 1EU ', „[email protected]”),
(„174562”, „John Innes Archie”, '55 Main Road LIVERPOOL L2 3OD ', „[email protected]”),
(„146788”, „Frederick Hanson”, '85 Highfield Road SHREWSBURY SY46 3ME ', „[email protected]”);

Rulați următoarele VÂRSTĂ declarație pentru a seta o altă constrângere a cheii străine pentru book_borrow_info masă pentru a face relația cu debitorii masa. Aici, împrumut_id este definit ca o cheie străină pentru book_borrow_info masa.

ALTER TABLE book_borrow_info ADAUGĂ CONSTRAINT fk_borrower
CHEIE EXTERNĂ(împrumut_id)REFERINȚE debitorii(id)LA ȘTERGEREA CASCADEI LA RESTRICȚIA DE ACTUALIZARE;

Acum, introduceți o înregistrare în book_borrow_info cu valabil împrumut_id valoare care există în id câmp de debitorii masa. 157643 valoarea există în tabelul debitorilor și următoarea declarație INSERT va fi executată cu succes.

INTRODUCE ÎN book_borrow_info VALORI
(„157643”, 1, „10.03.2020”, „2020-03-20”, 'Întors');

Următoarea instrucțiune INSERT va genera un mesaj de eroare deoarece valoarea id 195680 nu există în tabelul debitorilor.

INTRODUCE ÎN book_borrow_info VALORI
(„195680”, 1, „15.04.2020”, „30-04-2020”, 'Întors');

Concluzie:

Definirea corectă a constrângerilor cheii străine este o sarcină foarte importantă pentru crearea unei baze de date relaționale și gestionarea corespunzătoare a datelor între tabele. Cunoașterea utilizărilor constrângerilor cheii străine este foarte esențială pentru proiectanții de baze de date. Sper că acest articol îi va ajuta pe noii designeri de baze de date să înțeleagă conceptul de constrângeri de cheie străină și să le aplice în mod corespunzător în sarcinile lor.