Ako používať obmedzenia cudzieho kľúča MySQL

How Use Mysql Foreign Key Constraints



Obmedzenie cudzieho kľúča sa používa na vytvorenie vzťahu medzi dvoma tabuľkami v databáze MySQL. Je veľmi dôležitou vlastnosťou MySQL, že v súvisiacich tabuľkách nastavujete rôzne typy obmedzení. Na definovanie akéhokoľvek obmedzenia cudzieho kľúča pre akúkoľvek tabuľku musíte použiť primárny kľúč inej tabuľky. Primárny kľúč je jedinečný kľúč pre tabuľku na identifikáciu konkrétneho riadka v tabuľke a keď sa tento primárny kľúč použije do inej tabuľky, vytvorí sa vzťah one-to-one alebo one-to-many alebo many-to-many. sa nazýva cudzí kľúč. V tomto článku sú uvedené funkcie cudzích kľúčov a spôsob, akým je možné tieto kľúče použiť v tabuľkách MySQL.

Vlastnosti obmedzení cudzích kľúčov:

Niektoré dôležité vlastnosti obmedzenia cudzích kľúčov sú vysvetlené nižšie.







  • Dátový typ cudzieho kľúča, ktorý sa používa v podradenej tabuľke, musí byť rovnaký ako dátový typ primárneho kľúča, ktorý sa v rodičovskej tabuľke používa na odkazovanie na cudzí kľúč.
  • Akýkoľvek indexový stĺpec alebo viac stĺpcov je možné odkazovať ako na cudzí kľúč iba pre tabuľku InnoDB.
  • Na vytvorenie cudzieho kľúča sú potrebné oprávnenia na odkazy alebo aspoň jedno z oprávnení príkazov SELECT, INSERT, UPDATE a DELETE.
  • Cudzí kľúč je možné vytvoriť dvoma spôsobmi. Jeden pomocou príkazu CREATE a druhý pomocou príkazu ALTER.

Predpoklad:

Pred vytvorením obmedzenia cudzieho kľúča musíte vytvoriť databázu a nadradenú tabuľku s primárnym kľúčom. Predpokladajme, že názov databázy je „ knižnica “A obsahuje dve nadradené tabuľky s názvom„ knihy “A„ dlžník “. Vytvorte spojenie so serverom MySQL pomocou mysql klienta a spustením nasledujúcich príkazov SQL vytvorte databázu a tabuľky.



VYTVORIŤ DATABÁZA knižnica;
POUŽITIE knižnica;

VYTVORIŤ TABUĽKA knihy(
id INT NIE NULOVÝ AUTOMATICKÝ PRÍRASTOK ,
titul varchar (päťdesiat) NIE NULOVÝ ,
autor varchar (päťdesiat) NIE NULOVÝ ,
vydavateľ varchar (päťdesiat) NIE NULOVÝ ,
PRIMÁRNY KĽÚČ (id)
) MOTOR = INNODB ;

VYTVORIŤ TABUĽKA dlžníci(
id VARCHAR (päťdesiat) NIE NULOVÝ ,
názov varchar (päťdesiat) NIE NULOVÝ ,
adresa varchar (päťdesiat) NIE NULOVÝ ,
e -mail varchar (päťdesiat) NIE NULOVÝ ,
PRIMÁRNY KĽÚČ (id)
) MOTOR = INNODB ;



Definujte obmedzenie cudzieho kľúča pomocou príkazu CREATE

Vytvorte tabuľku s názvom „ book_borrow_info „S obmedzeniami cudzích kľúčov vykonaním nasledujúceho príkazu. Tu, book_id pole je a cudzí kľúč pre túto tabuľku a každá hodnota tohto poľa musí existovať v súbore id oblasti knihy stôl. knihy je rodičovská tabuľka a book_borrow_info je detský stôl. S cudzím kľúčom sú tu tiež nastavené dve obmedzenia. Toto sú VYMAZAŤ CASCADE a UPDATE CASCADE . To znamená, že ak sa niektorý primárny kľúč odstráni alebo aktualizuje z nadradenej tabuľky, odstránia sa zodpovedajúce záznamy súvisiace s podradenou tabuľkou súvisiace s cudzím kľúčom alebo sa aktualizuje cudzí kľúč.





VYTVORIŤ TABUĽKA book_borrow_info(
požičať_id VARCHAR (päťdesiat),
book_id INT ,
dátum pôžičky DÁTUM NIE NULOVÝ ,
dátum návratu DÁTUM NIE NULOVÝ ,
postavenie VARCHAR (pätnásť) NIE NULOVÝ ,
INDEX par_ind(book_id),
PRIMÁRNY KĽÚČ (požičať_id,dátum pôžičky),
CUDZÍ KĽÚČ (book_id) REFERENCIE knihy(id)
ZAPNUTÉ VYMAZAŤ CASCADE
ZAPNUTÉ AKTUALIZÁCIA CASCADE
) MOTOR = INNODB ;

Teraz spustite nasledujúce príkazy SQL a vložte niektoré záznamy do oboch tabuliek. Prvý príkaz INSERT vloží štyri záznamy do knihy stôl. Štyri hodnoty id oblasti knihy tabuľka bude 1, 2, 3 a 4 pre atribút automatického prírastku. Druhý príkaz INSERT vloží štyri záznamy do book_borrow_info založený na id hodnota knihy stôl.



VLOŽIŤ DO knihy HODNOTY
( NULOVÝ , „Zabiť vtáka“, „Harper Lee“, „Grand Central Publishing“),
( NULOVÝ , „Sto rokov samoty“, Garcia Marquez, „Lutfi Ozkok“),
( NULOVÝ , „Prejazd do Indie“, „Forster, E.M.“, „Obrázková knižnica BBC Hulton“),
( NULOVÝ , 'Neviditeľný muž', „Ralph Ellison“, „Encyclopædia Britannica, Inc.“);

VLOŽIŤ DO book_borrow_info HODNOTY
(„123490“, 1, „2020-02-15“, „2020-02-25“, 'Vrátený'),
(„157643“, 2, „2020-03-31“, „2020-03-10“, 'Čaká'),
(„174562“, 4, „2020-04-04“, „2020-04-24“, „Požičané“),
(„146788“, 3, „2020-04-10“, „2020-01-20“, „Požičané“);

Ak sa pokúsite vložiť hodnotu do poľa cudzieho kľúča podradenej tabuľky, ktorá neexistuje v poli primárneho kľúča nadradenej tabuľky, MySQL vygeneruje chybu. Nasledujúci príkaz SQL vygeneruje chybu, pretože nadradená tabuľka, knihy neobsahuje žiadnu id hodnotu 10 .

VLOŽIŤ DO book_borrow_info HODNOTY
(„195684“, 10, „2020-04-15“, „2020-04-30“, 'Vrátený');

Po vykonaní nasledujúceho príkazu DELETE, keď bude štvrtý záznam odstránený z knihy tabuľka potom súvisiace záznamy z book_borrow_info tabuľka sa automaticky odstráni z dôvodu obmedzenia cudzieho kľúča.

VYMAZAŤ OD knihy KDE id= 4;
VYBERTE * od knihy;
VYBERTE * od book_borrow_info;

Definujte obmedzenie cudzieho kľúča pomocou príkazu ALTER

Najprv vložte niekoľko záznamov do dlžníci tabuľka a táto tabuľka bude v ďalšej definovaná ako nadradená tabuľka VEK vyhlásenie.

VLOŽIŤ DO dlžníci HODNOTY
(„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]');

Spustite nasledujúce VEK príkaz, ktorým nastavíte ďalšie obmedzenie cudzieho kľúča book_borrow_info tabuľka, aby sa vzťah s dlžníci stôl. Tu, požičať_id je definovaný ako cudzí kľúč pre book_borrow_info stôl.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
CUDZÍ KĽÚČ(požičať_id)REFERENCIE dlžníci(id)ON DELETE CASCADE ON UPDATE RESTRICT;

Teraz vložte záznam do book_borrow_info s platným požičať_id hodnota, ktorá existuje v id oblasti dlžníci stôl. 157643 hodnota existuje v tabuľke dlžníkov a nasledujúci príkaz INSERT bude úspešne vykonaný.

VLOŽIŤ DO book_borrow_info HODNOTY
(„157643“, 1, „2020-03-10“, „2020-03-20“, 'Vrátený');

Nasledujúci príkaz INSERT vygeneruje chybové hlásenie, pretože hodnota id 195680 v tabuľke dlžníkov neexistuje.

VLOŽIŤ DO book_borrow_info HODNOTY
(„195680“, 1, „2020-04-15“, „2020-04-30“, 'Vrátený');

Záver:

Správne definovanie obmedzení cudzích kľúčov je veľmi dôležitou úlohou pri vytváraní relačnej databázy a vhodnom spravovaní údajov v tabuľkách. Vedieť, ako používať obmedzenia cudzích kľúčov, je pre návrhárov databáz veľmi dôležité. Dúfam, že tento článok pomôže novým návrhárom databáz porozumieť konceptu obmedzení cudzích kľúčov a správne ich uplatniť vo svojich úlohách.