Jak používat omezení cizího klíče MySQL

How Use Mysql Foreign Key Constraints



Omezení cizího klíče se používá k vytvoření vztahu mezi dvěma tabulkami v databázi MySQL. Velmi důležitou vlastností MySQL je nastavení různých typů omezení souvisejících tabulek. Chcete -li definovat jakékoli omezení cizího klíče pro libovolnou tabulku, musíte použít primární klíč jiné tabulky. Primární klíč je jedinečný klíč pro tabulku k identifikaci konkrétního řádku v tabulce, a když je tento primární klíč použit do jiné tabulky k vytvoření vztahu jedna k jedné nebo jeden k mnoha nebo mnoho k mnoha, pak to se nazývá cizí klíč. Funkce cizích klíčů a způsob, jakým lze tyto klíče použít v tabulkách MySQL, jsou uvedeny v tomto článku.

Vlastnosti omezení cizího klíče:

Některé důležité vlastnosti omezení cizího klíče jsou vysvětleny níže.







  • Datový typ cizího klíče, který je použit v podřízené tabulce, musí být stejný s datovým typem primárního klíče, který se používá v nadřazené tabulce k odkazování na cizí klíč.
  • Na jakýkoli indexový sloupec nebo více sloupců lze odkazovat jako na cizí klíč pouze pro tabulku InnoDB.
  • K vytvoření cizího klíče jsou nutná referenční oprávnění nebo alespoň jedno z oprávnění příkazů SELECT, INSERT, UPDATE a DELETE.
  • Cizí klíč lze vytvořit dvěma způsoby. Jeden pomocí příkazu CREATE a druhý pomocí příkazu ALTER.

Předpoklad:

Před vytvořením omezení cizího klíče musíte vytvořit databázi a nadřazenou tabulku s primárním klíčem. Předpokládejme, že název databáze je „ knihovna “A obsahuje dvě nadřazené tabulky s názvem„ knihy ' a ' dlužník “. Vytvořte spojení se serverem MySQL pomocí mysql klienta a spusťte následující příkazy SQL k vytvoření databáze a tabulek.



VYTVOŘIT DATABÁZE knihovna;
POUŽITÍ knihovna;

VYTVOŘIT STŮL knihy(
id INT NE NULA AUTO_INCREMENT ,
titul varchar (padesátka) NE NULA ,
autor varchar (padesátka) NE NULA ,
vydavatel varchar (padesátka) NE NULA ,
PRIMÁRNÍ KLÍČ (id)
) MOTOR = INNODB ;

VYTVOŘIT STŮL dlužníci(
id VARCHAR (padesátka) NE NULA ,
název varchar (padesátka) NE NULA ,
adresa varchar (padesátka) NE NULA ,
e-mailem varchar (padesátka) NE NULA ,
PRIMÁRNÍ KLÍČ (id)
) MOTOR = INNODB ;



Definujte omezení cizího klíče pomocí příkazu CREATE

Vytvořte tabulku s názvem „ book_borrow_info ‘S omezeními cizího klíče provedením následujícího příkazu. Tady, book_id pole je a cizí klíč pro tuto tabulku a každá hodnota tohoto pole musí existovat v id pole knihy stůl. knihy je nadřazená tabulka a book_borrow_info je dětský stůl. Zde jsou pomocí cizího klíče nastavena také dvě omezení. Tyto jsou ODSTRANIT KASKÁDU a UPDATE CASCADE . To znamená, že pokud bude jakýkoli primární klíč odebrán nebo aktualizován z nadřazené tabulky, pak budou odebrány odpovídající záznamy související s podřízenou tabulkou související s cizím klíčem nebo bude aktualizován cizí klíč.





VYTVOŘIT STŮL book_borrow_info(
půjčka_id VARCHAR (padesátka),
book_id INT ,
datum_půjčky DATUM NE NULA ,
datum návratu DATUM NE NULA ,
postavení VARCHAR (patnáct) NE NULA ,
INDEX par_ind(book_id),
PRIMÁRNÍ KLÍČ (půjčka_id,datum_půjčky),
CIZÍ KLÍČ (book_id) REFERENCE knihy(id)
NA VYMAZAT KASKÁDA
NA AKTUALIZACE KASKÁDA
) MOTOR = INNODB ;

Nyní spusťte následující příkazy SQL a vložte některé záznamy do obou tabulek. První příkaz INSERT vloží čtyři záznamy do knihy stůl. Čtyři hodnoty id pole knihy tabulka bude 1, 2, 3 a 4 pro atribut automatického přírůstku. Druhý příkaz INSERT vloží čtyři záznamy do book_borrow_info založeno na id hodnota knihy stůl.



VLOŽIT DO knihy HODNOTY
( NULA , 'Zabít drozda', 'Harper Lee', 'Grand Central Publishing'),
( NULA , „Sto let samoty“, 'Garcia Marquez', 'Lutfi Ozkok'),
( NULA , „Průchod do Indie“, 'Forster, E.M.', 'BBC Hulton Picture Library'),
( NULA , 'Neviditelný muž', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

VLOŽIT DO book_borrow_info HODNOTY
('123490', 1, „2020-02-15“, „2020-02-25“, 'Vrátil'),
('157643', 2, „2020-03-31“, „2020-03-10“, 'Čekající'),
('174562', 4, „2020-04-04“, „2020-04-24“, 'Půjčeno'),
('146788', 3, „2020-04-10“, „2020-01-20“, 'Půjčeno');

Pokud se pokusíte vložit hodnotu do pole cizího klíče podřízené tabulky, která neexistuje v poli primárního klíče rodičovské tabulky, MySQL vygeneruje chybu. Následující příkaz SQL vygeneruje chybu, protože nadřazená tabulka, knihy neobsahuje žádnou id hodnotu 10 .

VLOŽIT DO book_borrow_info HODNOTY
('195684', 10, „2020-04-15“, „2020-04-30“, 'Vrátil');

Po provedení následujícího příkazu DELETE bude čtvrtý záznam odebrán z knihy tabulka, pak související záznamy z book_borrow_info tabulka bude automaticky odstraněna kvůli omezení cizího klíče.

VYMAZAT Z knihy KDE id= 4;
VYBRAT * z knihy;
VYBRAT * z book_borrow_info;

Definujte omezení cizího klíče pomocí příkazu ALTER

Nejprve vložte nějaké záznamy do dlužníci tabulka a tato tabulka bude v další definována jako nadřazená tabulka STÁŘÍ tvrzení.

VLOŽIT DO dluž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]');

Spusťte následující STÁŘÍ příkaz pro nastavení dalšího omezení cizího klíče book_borrow_info tabulka, aby se vztah s dlužníci stůl. Tady, půjčka_id je definován jako cizí klíč pro book_borrow_info stůl.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
CIZÍ KLÍČ(půjčka_id)REFERENCE dlužníci(id)ON DELETE CASCADE ON UPDATE RESTRICT;

Nyní vložte záznam do book_borrow_info s platným půjčka_id hodnota, která existuje v id pole dlužníci stůl. 157643 hodnota existuje v tabulce dlužníků a následující příkaz INSERT bude úspěšně proveden.

VLOŽIT DO book_borrow_info HODNOTY
('157643', 1, „2020-03-10“, „2020-03-20“, 'Vrátil');

Následující příkaz INSERT vygeneruje chybovou zprávu, protože hodnota id 195680 neexistuje v tabulce dlužníků.

VLOŽIT DO book_borrow_info HODNOTY
('195680', 1, „2020-04-15“, „2020-04-30“, 'Vrátil');

Závěr:

Správné definování omezení cizího klíče je velmi důležitým úkolem pro vytváření relační databáze a odpovídající správu dat mezi tabulkami. Znalost použití omezení cizího klíče je pro návrháře databází velmi zásadní. Doufám, že tento článek pomůže novým návrhářům databází porozumět konceptu omezení cizích klíčů a správně je uplatnit ve svých úkolech.