Kako koristiti ograničenja stranih ključeva MySQL

How Use Mysql Foreign Key Constraints



Ograničenje stranog ključa koristi se za uspostavljanje odnosa između dvije tablice u MySQL bazi podataka. Vrlo je važna značajka MySQL -a postavljanje različitih vrsta ograničenja na povezane tablice. Da biste definirali ograničenje stranog ključa za bilo koju tablicu, morate koristiti primarni ključ druge tablice. Primarni ključ jedinstveni je ključ za tablicu za identifikaciju određenog retka u tablici i kada se taj primarni ključ koristi u drugoj tablici za stvaranje odnosa jedan-na-jedan ili jedan-prema-više ili više-prema-više tada naziva se stranim ključem. Značajke stranih ključeva i način na koji se ti ključevi mogu koristiti u MySQL tablicama prikazane su u ovom članku.

Značajke ograničenja stranih ključeva:

U nastavku su objašnjene neke važne značajke ograničenja stranih ključeva.







  • Tip podataka stranog ključa koji se koristi u podređenoj tablici mora biti isti s tipom podataka primarnog ključa koji se koristi u nadređenoj tablici za upućivanje vanjskog ključa.
  • Svaki stupac indeksa ili više stupaca mogu se referencirati kao strani ključ samo za tablicu InnoDB.
  • Za stvaranje stranog ključa potrebne su reference ili barem jedna od privilegija izraza SELECT, INSERT, UPDATE i DELETE.
  • Strani ključ može se stvoriti na dva načina. Jedan pomoću izraza CREATE, a drugi pomoću izraza ALTER.

Preduvjet:

Prije nego što stvorite ograničenje stranog ključa, morate stvoriti bazu podataka i nadređenu tablicu s primarnim ključem. Pretpostavimo da je naziv baze podataka ‘ knjižnica 'I sadrži dvije nadređene tablice pod nazivom' knjige 'I' zajmoprimac ’. Uspostavite vezu s MySQL poslužiteljem pomoću mysql klijenta i pokrenite sljedeće SQL izraze za stvaranje baze podataka i tablica.



STVORITI BAZA PODATAKA knjižnica;
KORISTITI knjižnica;

STVORITI STOL knjige(
iskaznica INT NE NULL AUTO_INCREMENT ,
titula varchar (pedeset) NE NULL ,
Autor varchar (pedeset) NE NULL ,
izdavač varchar (pedeset) NE NULL ,
GLAVNI KLJUČ (iskaznica)
) MOTOR = INNODB ;

STVORITI STOL zajmoprimci(
iskaznica VARCHAR (pedeset) NE NULL ,
Ime varchar (pedeset) NE NULL ,
adresa varchar (pedeset) NE NULL ,
e -mail varchar (pedeset) NE NULL ,
GLAVNI KLJUČ (iskaznica)
) MOTOR = INNODB ;



Definirajte ograničenje stranog ključa pomoću izraza CREATE

Napravite tablicu pod nazivom ' book_borrow_info ‘S ograničenjima stranog ključa izvršavanjem sljedeće naredbe. Evo, book_id polje je a strani kljuc za ovu tablicu i svaka vrijednost ovog polja mora postojati u iskaznica polje od knjige stol. knjige je roditeljska tablica i book_borrow_info je dječji stol. Ovdje su s vanjskim ključem postavljena i dva ograničenja. Ovi su IZBRIŠI CASCADE i AŽURIRAJ CASCADE . To znači da će se bilo koji primarni ključ ukloniti ili ažurirati iz nadređene tablice, a zatim će se ukloniti odgovarajući zapisi u vezi s podređenom tablicom koji se odnose na vanjski ključ ili će se vanjski ključ ažurirati.





STVORITI STOL book_borrow_info(
posudi_id VARCHAR (pedeset),
book_id INT ,
datum posudbe DATUM NE NULL ,
Datum povratka DATUM NE NULL ,
status VARCHAR (petnaest) NE NULL ,
INDEKS par_ind(book_id),
GLAVNI KLJUČ (posudi_id,datum posudbe),
STRANI KLJUC (book_id) REFERENCE knjige(iskaznica)
NA IZBRISATI KASKADA
NA AŽURIRANJE KASKADA
) MOTOR = INNODB ;

Sada pokrenite sljedeće SQL izraze da biste umetnuli neke zapise u obje tablice. Prvi izraz INSERT umetnut će četiri zapisa u knjige stol. Četiri vrijednosti iskaznica polje od knjige tablica će biti 1, 2, 3 i 4 za atribut automatskog povećanja. Drugi izraz INSERT umetnut će četiri zapisa u book_borrow_info bazirano na iskaznica vrijednost knjige stol.



UMETNUTI U knjige VRIJEDNOSTI
( NULL , 'Ubiti pticu rugalicu', 'Harper Lee', 'Grand Central Publishing'),
( NULL , 'Sto godina samoće', 'Garcia Marquez', 'Lutfi Ozkok'),
( NULL , 'Prolaz u Indiju', 'Forster, E.M.', 'Biblioteka slika BBC Hulton'),
( NULL , 'Nevidljivi čovjek', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

UMETNUTI U book_borrow_info VRIJEDNOSTI
('123490', 1, '2020-02-15', '2020-02-25', 'Vraćeno'),
('157643', 2, '2020-03-31', '2020-03-10', 'U tijeku'),
('174562', 4, '2020-04-04', '2020-04-24', 'Posuđeno'),
('146788', 3, '2020-04-10', '2020-01-20', 'Posuđeno');

Ako pokušate umetnuti vrijednost u polje vanjskog ključa podređene tablice koja ne postoji u polju primarnog ključa nadređene tablice, MySQL će generirati pogrešku. Sljedeći SQL izraz generirat će pogrešku jer nadređena tablica, knjige ne sadrži nikakvu vrijednost id 10 .

UMETNUTI U book_borrow_info VRIJEDNOSTI
('195684', 10, '2020-04-15', '2020-04-30', 'Vraćeno');

Nakon izvršavanja sljedeće naredbe DELETE, kada će se četvrti zapis ukloniti iz knjige tablicu zatim povezane zapise iz book_borrow_info tablica će se automatski ukloniti zbog ograničenja stranog ključa.

IZBRISATI IZ knjige GDJE iskaznica= 4;
ODABERI * iz knjige;
ODABERI * iz book_borrow_info;

Definirajte ograničenje stranog ključa pomoću izraza ALTER

Prvo umetnite neke zapise u zajmoprimci tablica i ova tablica bit će definirana kao nadređena tablica u sljedećoj DOB izjava.

UMETNUTI U zajmoprimci VRIJEDNOSTI
('123490', 'Patrick Wood', 'West Street 34 LANCASTER LA14 9ZH', '[zaštićena e -pošta]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU ', '[zaštićena e -pošta]'),
('174562', 'John Innes Archie', '55 Glavna cesta LIVERPOOL L2 3OD ', '[zaštićena e -pošta]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[zaštićena e -pošta]');

Pokrenite sljedeće DOB izjavu za koju treba postaviti drugo ograničenje stranog ključa book_borrow_info stolom za uspostavljanje odnosa zajmoprimci stol. Ovdje, posudi_id definira se kao strani ključ za book_borrow_info stol.

ALTER TABELA book_borrow_info DODAJTE OGRANIČENJE fk_posuđivač
STRANI KLJUC(posudi_id)LITERATURA zajmoprimci(iskaznica)NA IZBRIŠI CASCADE NA AŽURIRANO OGRANIČENJE;

Sada umetnite zapis u book_borrow_info s valjanim posudi_id vrijednost koja postoji u iskaznica polje od zajmoprimci stol. 157643 vrijednost postoji u tablici zajmoprimaca i sljedeća naredba INSERT bit će uspješno izvedena.

UMETNUTI U book_borrow_info VRIJEDNOSTI
('157643', 1, '2020-03-10', '2020-03-20', 'Vraćeno');

Sljedeći izraz INSERT generirat će poruku o pogrešci jer je vrijednost id 195680 ne postoji u tablici zajmoprimaca.

UMETNUTI U book_borrow_info VRIJEDNOSTI
('195680', 1, '2020-04-15', '2020-04-30', 'Vraćeno');

Zaključak:

Pravilno definiranje ograničenja stranih ključeva vrlo je važan zadatak za stvaranje relacijske baze podataka i odgovarajuće upravljanje podacima među tablicama. Poznavanje uporabe ograničenja stranih ključeva vrlo je važno za dizajnere baza podataka. Nadam se da će ovaj članak pomoći novim dizajnerima baze podataka da razumiju koncept ograničenja stranih ključeva i pravilno ih primijene u svojim zadacima.