Hogyan kell használni a MySQL idegen kulcs kényszereit

How Use Mysql Foreign Key Constraints



Az idegen kulcs megszorítással kapcsolatot hoznak létre a MySQL adatbázis két táblája között. Nagyon fontos jellemzője a MySQL -nek, hogy különböző típusú korlátozásokat állít be a kapcsolódó táblázatokra. Bármely tábla idegen kulcskorlátozásának meghatározásához egy másik tábla elsődleges kulcsát kell használnia. Az elsődleges kulcs egy egyedi kulcs egy tábla számára, amely azonosítja a táblázat adott sorát, és amikor ezt az elsődleges kulcsot egy másik táblába használják egy-egy vagy egy-sok-sok vagy sok-sok kapcsolat létrehozásához idegen kulcsnak hívják. Ebben a cikkben bemutatjuk az idegen kulcsok jellemzőit és a MySQL táblázatokban való felhasználásának módját.

Az idegen kulcsokra vonatkozó korlátozások jellemzői:

Az idegen kulcs korlátozásának néhány fontos jellemzőjét az alábbiakban ismertetjük.







  • A gyermek tábla által használt idegen kulcs adattípusának meg kell egyeznie az elsődleges kulcs adattípusával, amelyet a szülő táblában használnak az idegen kulcs hivatkozásához.
  • Bármely indexoszlopra vagy több oszlopra csak az InnoDB tábla idegen kulcsként hivatkozhat.
  • Az idegen kulcs létrehozásához referenciajogosultságok vagy a SELECT, INSERT, UPDATE és DELETE utasítások legalább egyike szükséges.
  • Az idegen kulcs kétféleképpen hozható létre. Az egyik a CREATE utasítás, a másik az ALTER utasítás használatával.

Előfeltétel:

Az idegen kulcs megszorításának létrehozása előtt létre kell hoznia egy adatbázist és egy szülő táblát az elsődleges kulccsal. Tegyük fel, hogy az adatbázis neve ' könyvtár 'És két szülő táblát tartalmaz' könyvek 'És' hitelfelvevő ’. Hozzon létre kapcsolatot a MySQL szerverrel a mysql ügyfél és futtassa a következő SQL utasításokat az adatbázis és a táblázatok létrehozásához.



TEREMT ADATBÁZIS könyvtár;
HASZNÁLAT könyvtár;

TEREMT ASZTAL könyvek(
id INT NEM NULLA AUTO_INCREMENT ,
cím varchar (ötven) NEM NULLA ,
szerző varchar (ötven) NEM NULLA ,
kiadó varchar (ötven) NEM NULLA ,
ELSŐDLEGES KULCS (id)
) MOTOR = INNODB ;

TEREMT ASZTAL hitelfelvevők(
id VARCHAR (ötven) NEM NULLA ,
név varchar (ötven) NEM NULLA ,
cím varchar (ötven) NEM NULLA ,
email varchar (ötven) NEM NULLA ,
ELSŐDLEGES KULCS (id)
) MOTOR = INNODB ;



Határozza meg az idegen kulcs korlátozását a CREATE utasítás használatával

Hozzon létre egy '' nevű táblázatot book_borrow_info „Idegen kulcsszűkítésekkel az alábbi utasítás végrehajtásával. Itt, a book_id mező a idegen kulcs ehhez a táblához és ennek a mezőnek minden értékének léteznie kell a id mezője könyvek asztal. könyvek a szülő tábla és book_borrow_info a gyermekasztal. Az idegen kulccsal itt is két korlátozás van beállítva. Ezek CASCADE TÖRLÉSE és UPDATE CASCADE . Ez azt jelenti, hogy ha bármelyik elsődleges kulcs eltávolítja vagy frissíti a szülő táblát, akkor az idegen kulcshoz kapcsolódó, a gyermek táblához kapcsolódó rekordok eltávolításra kerülnek, vagy az idegen kulcs frissítésre kerül.





TEREMT ASZTAL book_borrow_info(
kölcsön_azonosító VARCHAR (ötven),
book_id INT ,
kölcsönzés_dátum DÁTUM NEM NULLA ,
visszatérítési dátum DÁTUM NEM NULLA ,
állapot VARCHAR (tizenöt) NEM NULLA ,
INDEX par_ind(book_id),
ELSŐDLEGES KULCS (kölcsön_azonosító,kölcsönzés_dátum),
IDEGEN KULCS (book_id) IRODALOM könyvek(id)
TOVÁBB TÖRÖL VÍZESÉS
TOVÁBB FRISSÍTÉS VÍZESÉS
) MOTOR = INNODB ;

Most futtassa a következő SQL utasításokat néhány rekord beillesztéséhez mindkét táblába. Az első INSERT utasítás négy rekordot illeszt be könyvek asztal. A négy értéke id mezője könyvek táblázat 1, 2, 3 és 4 lesz az automatikus növelés attribútumhoz. A második INSERT utasítás négy rekordot szúr be book_borrow_info alapján id értéke könyvek asztal.



INSERT BA könyvek ÉRTÉKEK
( NULLA , 'Megölni egy gúnymadarat', 'Harper Lee', 'Grand Central Publishing'),
( NULLA , „Száz év magány”, 'Garcia Marquez', 'Lutfi Ozkok'),
( NULLA , „Egy út Indiába”, 'Forster, E.M.', 'BBC Hulton Képkönyvtár'),
( NULLA , 'Láthatatlan ember', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

INSERT BA book_borrow_info ÉRTÉKEK
('123490', 1, „2020-02-15”, „2020-02-25”, „Visszatért”),
('157643', 2, „2020-03-31”, „2020-03-10”, 'Függőben levő'),
('174562', 4, „2020-04-04”, „2020-04-24”, 'Kölcsönkért'),
('146788', 3, „2020-04-10”, „2020-01-20”, 'Kölcsönkért');

Ha olyan értéket próbál beilleszteni a gyermek tábla idegen kulcs mezőjébe, amely nem létezik a szülő tábla elsődleges kulcsmezőjében, akkor a MySQL hibát generál. A következő SQL utasítás hibát generál, mert a szülő tábla, könyvek nem tartalmaz azonosító értéket 10 .

INSERT BA book_borrow_info ÉRTÉKEK
('195684', 10, „2020-04-15”, „2020-04-30”, „Visszatért”);

A következő DELETE utasítás végrehajtása után, amikor a negyedik rekord eltávolításra kerül a könyvek táblázatot, majd a kapcsolódó rekordokat a book_borrow_info táblázat automatikusan eltávolításra kerül az idegen kulcs kényszer miatt.

TÖRÖL TÓL TŐL könyvek AHOL id= 4;
SELECT * tól től könyvek;
SELECT * tól től book_borrow_info;

Határozza meg az idegen kulcs kényszerét az ALTER utasítás használatával

Először helyezzen be néhány rekordot hitelfelvevők táblázatot, és ezt a táblázatot szülő táblaként határozzák meg a következőben KOR nyilatkozat.

INSERT BA hitelfelvevők ÉRTÉKEK
('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 LIVERPOOL L2 3OD főút', '[email protected]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[email protected]');

Futtassa a következőt KOR utasítást egy másik idegen kulcsra vonatkozó korlátozás beállításához book_borrow_info táblázat a kapcsolat létrehozásához hitelfelvevők asztal. Itt, kölcsön_azonosító idegen kulcsként van definiálva book_borrow_info asztal.

ALTER TABLE book_borrow_info CONSTRAINT HOZZÁADÁS fk_borrower
IDEGEN KULCS(kölcsön_azonosító)IRODALOM hitelfelvevők(id)ON CASE CADE ON UPDATE RESTRICT;

Most helyezzen be egy rekordot book_borrow_info érvényes kölcsön_azonosító érték, amely létezik id mezője hitelfelvevők asztal. 157643 érték létezik a hitelfelvevők táblázatban, és a következő INSERT utasítás sikeres lesz.

INSERT BA book_borrow_info ÉRTÉKEK
('157643', 1, „2020-03-10”, „2020-03-20”, „Visszatért”);

A következő INSERT utasítás hibaüzenetet generál, mert az id érték 195680 nem létezik a hitelfelvevők táblázatában.

INSERT BA book_borrow_info ÉRTÉKEK
('195680', 1, „2020-04-15”, „2020-04-30”, „Visszatért”);

Következtetés:

Az idegen kulcskorlátok megfelelő meghatározása nagyon fontos feladat egy relációs adatbázis létrehozásához és a táblázatok közötti adatok megfelelő kezeléséhez. Az adatbázis -tervezők számára nagyon fontos, hogy ismerjük az idegen kulcsok megszorításainak felhasználását. Remélem, hogy ez a cikk segíteni fog az új adatbázis -tervezőknek megérteni az idegen kulcsok megszorításainak fogalmát és megfelelően alkalmazni őket feladataikban.