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_borrowerCUDZÍ 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.