Kako uporabljati omejitve tujih ključev MySQL

How Use Mysql Foreign Key Constraints



Omejitev tujega ključa se uporablja za vzpostavitev odnosa med dvema tabelama v bazi podatkov MySQL. Zelo pomembna lastnost MySQL je določiti različne vrste omejitev za sorodne tabele. Če želite določiti omejitev tujega ključa za katero koli tabelo, morate uporabiti primarni ključ druge tabele. Primarni ključ je edinstven ključ za tabelo, ki identificira določeno vrstico v tabeli, in ko se ta primarni ključ uporabi v drugi tabeli za vzpostavitev odnosa ena proti ena ali ena proti več ali več proti številu, potem se imenuje tuji ključ. V tem članku so prikazane značilnosti tujih ključev in njihova uporaba v tabelah MySQL.

Značilnosti omejitev tujih ključev:

Spodaj so pojasnjene nekatere pomembne značilnosti omejitve tujih ključev.







  • Podatkovni tip tujega ključa, ki se uporablja v podrejeni tabeli, mora biti enak tipu podatkov primarnega ključa, ki se uporablja v nadrejeni tabeli za sklicevanje na tuji ključ.
  • Vsak stolpec indeksa ali več stolpcev se lahko sklicuje kot tuji ključ samo za tabelo InnoDB.
  • Za ustvarjanje tujega ključa so potrebne reference ali vsaj eden od privilegijev stavkov SELECT, INSERT, UPDATE in DELETE.
  • Tuji ključ lahko ustvarite na dva načina. Enega z uporabo stavka CREATE in drugega z uporabo stavka ALTER.

Predpogoj:

Preden ustvarite omejitev tujega ključa, morate s primarnim ključem ustvariti bazo podatkov in nadrejeno tabelo. Recimo, da je ime zbirke podatkov ' knjižnica 'In vsebuje dve nadrejeni tabeli z imenom' knjige 'In' posojilojemalec «. Vzpostavite povezavo s strežnikom MySQL s pomočjo mysql odjemalca in zaženite naslednje stavke SQL, da ustvarite bazo podatkov in tabele.



Ustvari BAZA PODATKOV knjižnica;
UPORABA knjižnica;

Ustvari TABELA knjige(
id INT NE NIČ AUTO_INCREMENT ,
naslov varchar (petdeset) NE NIČ ,
avtor varchar (petdeset) NE NIČ ,
založnik varchar (petdeset) NE NIČ ,
PRIMARNI KLJUČ (id)
) MOTOR = INNODB ;

Ustvari TABELA posojilojemalci(
id VARCHAR (petdeset) NE NIČ ,
ime varchar (petdeset) NE NIČ ,
naslov varchar (petdeset) NE NIČ ,
E-naslov varchar (petdeset) NE NIČ ,
PRIMARNI KLJUČ (id)
) MOTOR = INNODB ;



Določite omejitev tujega ključa z uporabo stavka CREATE

Ustvarite tabelo z imenom ' book_borrow_info „Z omejitvami tujih ključev z izvajanjem naslednje izjave. Tukaj, book_id polje je a tuji ključ za to tabelo in vsaka vrednost tega polja mora obstajati v id polje knjige miza. knjige je nadrejena tabela in book_borrow_info je otroška miza. Tu so tuji ključ določili tudi dve omejitvi. To so IZBRIŠI CASCADE in Posodobi CASCADE . To pomeni, da če kateri koli primarni ključ odstrani ali posodobi iz nadrejene tabele, bodo ustrezni zapisi, povezani s podrejeno tabelo, povezani s tujim ključem, odstranjeni ali pa se bo tuji ključ posodobil.





Ustvari TABELA book_borrow_info(
posojilo_id VARCHAR (petdeset),
book_id INT ,
posoji_datum DATE NE NIČ ,
return_date DATE NE NIČ ,
stanje VARCHAR (petnajst) NE NIČ ,
KAZALO par_ind(book_id),
PRIMARNI KLJUČ (posojilo_id,posoji_datum),
TUJI KLJUČ (book_id) REFERENCE knjige(id)
VKLOPLJENO IZBRIŠI CASCADE
VKLOPLJENO NADGRADNJA CASCADE
) MOTOR = INNODB ;

Zdaj zaženite naslednje stavke SQL, da vstavite nekaj zapisov v obe tabeli. Prvi stavek INSERT bo vstavil štiri zapise knjige miza. Štiri vrednosti id polje knjige tabela bo 1, 2, 3 in 4 za atribut samodejnega povečanja. Drugi stavek INSERT bo vstavil štiri zapise book_borrow_info temelji na id vrednost knjige miza.



VSTAVI INTO knjige VREDNOTE
( NIČ , 'Ubiti posmehovalca', 'Harper Lee', 'Grand Central Publishing'),
( NIČ , 'Sto let samote', 'Garcia Marquez', 'Lutfi Ozkok'),
( NIČ , 'Prehod v Indijo', 'Forster, E.M.', 'Knjižnica slik BBC Hulton'),
( NIČ , 'Nevidni človek', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

VSTAVI INTO book_borrow_info VREDNOTE
('123490', 1, '2020-02-15', '2020-02-25', 'Vrnjeno'),
('157643', 2, '2020-03-31', '2020-03-10', 'V teku'),
('174562', 4, '2020-04-04', '2020-04-24', 'Izposojeno'),
('146788', 3, '2020-04-10', '2020-01-20', 'Izposojeno');

Če poskusite v polje tujega ključa podrejene tabele vnesti vrednost, ki ne obstaja v polju primarnega ključa nadrejene tabele, bo MySQL ustvaril napako. Naslednji stavek SQL bo ustvaril napako, ker je nadrejena tabela, knjige ne vsebuje nobene vrednosti id 10 .

VSTAVI INTO book_borrow_info VREDNOTE
('195684', 10, '2020-04-15', '2020-04-30', 'Vrnjeno');

Ko izvedete naslednji stavek DELETE, ko bo četrti zapis odstranjen iz knjige tabelo nato povezane zapise iz book_borrow_info tabela bo samodejno odstranjena zaradi omejitve tujega ključa.

IZBRIŠI IZ knjige KJE id= 4;
IZBERI * od knjige;
IZBERI * od book_borrow_info;

Določite omejitev tujega ključa z uporabo stavka ALTER

Najprej vstavite nekaj zapisov posojilojemalci tabela in ta tabela bo v naslednjem definirana kot nadrejena tabela STAROST izjavo.

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

Zaženite naslednje STAROST izjavo, za katero nastavite drugo omejitev tujega ključa book_borrow_info mizo, s katero vzpostavite odnos posojilojemalci miza. Tukaj, posojilo_id je definiran kot tuji ključ za book_borrow_info miza.

ALTER TABLE book_borrow_info DODAJ KONSTRAINT fk_posojilojemalec
TUJI KLJUČ(posojilo_id)REFERENCE posojilojemalcev(id)NA IZBRIŠI CASCADE NA UPORABNO OMEJITEV;

Zdaj vstavite zapis v book_borrow_info z veljavno posojilo_id vrednost, ki obstaja v id polje posojilojemalci miza. 157643 vrednost obstaja v tabeli posojilojemalcev in naslednji stavek INSERT bo uspešno izveden.

VSTAVI INTO book_borrow_info VREDNOTE
('157643', 1, '2020-03-10', '2020-03-20', 'Vrnjeno');

Naslednji stavek INSERT bo ustvaril sporočilo o napaki, ker je vrednost id 195680 ne obstaja v tabeli posojilojemalcev.

VSTAVI INTO book_borrow_info VREDNOTE
('195680', 1, '2020-04-15', '2020-04-30', 'Vrnjeno');

Zaključek:

Pravilno določanje omejitev tujih ključev je zelo pomembna naloga za ustvarjanje relacijske baze podatkov in ustrezno upravljanje podatkov med tabelami. Poznavanje uporabe omejitev tujih ključev je za oblikovalce baz podatkov zelo pomembno. Upam, da bo ta članek novim oblikovalcem zbirk podatkov pomagal razumeti pojem omejitev tujih ključev in jih pravilno uporabiti pri svojih nalogah.