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_borrowerIDEGEN 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.