A hivatkozási integritási megkötés más néven idegen kulcs kényszer . Az idegen kulcs olyan kulcs, amelynek értékei egy másik tábla elsődleges kulcsából származnak.
A táblázat, amelyből az értékek származnak, az úgynevezett Mester vagy Hivatkozott Táblázat és a táblázat, amelybe az értékek ennek megfelelően kerülnek beillesztésre, az úgynevezett Gyermek vagy hivatkozás Táblázat, Más szóval azt mondhatjuk, hogy a táblázat, amely tartalmazza a idegen kulcs az úgynevezett gyermek asztal , és a táblázatot, amely tartalmazza a Elsődleges kulcs/jelölt kulcs az úgynevezett hivatkozott vagy szülő tábla . Amikor az adatbázis-relációs modellről beszélünk, a kulcsjelölt attribútumok halmazaként definiálható, amelynek nulla vagy több attribútuma lehet.
A főtábla vagy a hivatkozott tábla szintaxisa a következő:
java bab
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Itt Roll oszlop úgy működik, mint Elsődleges kulcs, amely segít az idegen kulcs értékének származtatásában a gyermek táblában.
A Child Table vagy Referencing table szintaxisa a következő:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
A fenti táblázatban a Roll oszlop úgy működik, mint Idegen kulcs, amelynek értékeit a mester tábla elsődleges kulcsának Roll értékének felhasználásával származtatjuk.
Idegenkulcs-korlát VAGY Hivatkozási integritás-megkötés.
Két hivatkozási integritási megkötés létezik:
Kényszer beszúrása: Az érték nem illeszthető be a GYERMEK táblába, ha az érték nem a MASTER táblában található
Megszorítás törlése: Az érték nem törölhető a MASTER táblából, ha az érték a GYERMEK táblában található
Tegyük fel, hogy a Roll = 05 értéket szeretné beszúrni a SUBJECT táblázat oszlopainak más értékeivel, akkor azonnal megjelenik egy hibaüzenet. Idegen kulcs kényszer megsértve ' azaz egy beszúrási parancs futtatásakor:
Beszúrás a SUBJECT értékekbe (5, 786, OS); az SQL nem fogja szórakoztatni a beillesztési kényszer miatt (Mivel nem lehet értéket beszúrni egy utódtáblába, ha az érték nem a fő táblában található, mivel a Roll = 5 nem szerepel a mester táblában, ezért a Roll = 5 nem írható be a gyermektáblázatba.)
Hasonlóképpen, ha törölni szeretné a Roll = 4 értéket a DIÁK táblázatból, azonnal megjelenik egy hibaüzenet. Idegenkulcs-korlátozás megsértve ' azaz egy törlési parancs futtatásakor:
Törlés a DIÁK közül, ahol Roll = 4; nem fogja szórakoztatni az SQL-t a törlési kényszer miatt. (Mivel nem törölheti az értéket a mester táblából, ha az érték a gyermek táblában van, mivel a Roll = 5 szerepel a gyermek táblában, ezért nem lesz megengedett a Roll = 5 törlése a mester táblából, így ha valahogy sikerült törölnünk a Roll = 5 értéket, majd a Roll = 5 elérhető lesz a gyermektáblázatban, ami végül megsérti a beillesztési megkötést.)
A CASCADE TÖRLÉSÉRE.
java sorok
A törlési megkötésnek megfelelően: Az érték nem törölhető a MASTER táblából, ha az érték a GYERMEK táblában található. Jön a következő kérdés, hogy törölhetjük-e az értéket a fő táblából, ha az érték az utódtáblában van a törlési kényszer megsértése nélkül? azaz abban a pillanatban, amikor töröljük az értéket a fő táblából, a hozzá tartozó értéknek a gyermek táblából is törlődik.
A fenti kérdésre a válasz IGEN, törölhetjük az értéket a törzstáblából, ha az érték a gyermek táblában van a törlési kényszer megsértése nélkül, a gyermektábla létrehozása során enyhe módosítást kell végeznünk, azaz hozzáadással. a kaszkád törlésekor .
TÁBLÁZAT SZINTaxis
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
A fenti szintaxisban az idegen kulcs létrehozásához használt hivatkozási kulcsszó után hozzáadtuk a delete kaszkádot, ilyen hozzáadásával törölhetjük az értéket a fő táblából, ha az érték a gyermek táblában van anélkül, hogy megsértené a törlést. kényszer. Ha most törölni szeretné a Roll = 5 értéket a fő táblából, bár a Roll = 5 a gyermektáblában van, akkor ez lehetséges, mert abban a pillanatban, amikor kiadja a parancsot, hogy törölje a Roll = 5 értéket a mester táblából, a Roll = sorban lévő Roll = A gyermektáblázat 5. része is törlődik.
Megjelenik a fenti két táblázat, mindegyik négy értékkel rendelkező STUDENT és SUBJECT, most tegyük fel, hogy törölni szeretné a Roll = 4 értéket a STUDENT(Master) táblából egy SQL parancs beírásával: törlés a DIÁK közül, ahol Roll = 4;
Abban a pillanatban, amikor az SQL végrehajtja a fenti parancsot, a SUBJECT( Child ) táblázatból Roll = 4 sor is törlődik, az eredmény DIÁK és TÁRGY táblázat így fog kinézni:
A fenti két táblázatból, DIÁK és TÁRGY, láthatja, hogy mindkét táblázatban a Roll = 4 egyszerre törlődik a törlési kényszer megsértése nélkül.
10/10
Az interjúk során néha feltesznek egy nagyon fontos kérdést: Lehet-e NULL értéke az idegen kulcsnak?
A fenti kérdésre a válasz IGEN, lehet, hogy NULL értékei vannak, míg az elsődleges kulcs semmi áron nem lehet NULL. A fenti kérdés gyakorlatilag megértéséhez értsük meg az alábbiakban a delete null fogalmát.
ON DELETE NULL.
A törlési megkötésnek megfelelően: Az érték nem törölhető a MASTER táblából, ha az érték a GYERMEK táblában található. Jön a következő kérdés, hogy törölhetjük-e az értéket a fő táblából, ha az érték az utódtáblában van a törlési kényszer megsértése nélkül? azaz abban a pillanatban, amikor töröljük az értéket a mester táblából, a hozzá tartozó értéket a gyermektáblából is törölni kell, vagy helyettesíteni kell a NULL értékkel.
Az ubuntu build elengedhetetlen
A fenti kérdésre a válasz IGEN, törölhetjük az értéket a mester táblából, ha az érték a gyermek táblában fekszik a törlési kényszer megsértése nélkül, ha az idegen kulcsba NULL-t írunk be, a gyermektábla létrehozása során enyhe módosítást kell végeznünk, pl. hozzáadásával null törlésekor .
TÁBLÁZAT SZINTaxis:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
A fenti szintaxisban közvetlenül a hivatkozások kulcsszó (idegen kulcs létrehozásához használt kulcsszó) után hozzáadtuk a delete null elemet, ilyen hozzáadásával törölhetjük az értéket a mester táblából, ha az érték a gyermek táblában van anélkül, hogy megsértené a törlést. kényszer. Ha most törölni szeretné a Roll = 4 értéket a mester táblából annak ellenére, hogy a Roll = 4 az utódtáblában van, ez lehetséges, mert abban a pillanatban, amikor kiadja a parancsot, hogy törölje a Roll = 4 értéket a fő táblából, a Roll = sorban lévő sor A gyermek tábla 4-je helyébe NULL érték lép.
Megjelenik a fenti két táblázat, mindegyik négy értékkel rendelkező STUDENT és SUBJECT tábla, most tegyük fel, hogy törölni szeretné a Roll = 4 értéket a STUDENT( Master ) táblázatból egy SQL parancs beírásával: törlés a DIÁK közül, ahol Roll = 4;
Abban a pillanatban, amikor az SQL végrehajtja a fenti parancsot, a SUBJECT( Child ) táblázat Roll = 4 sora lecserélődik NULL értékre, az eredmény DIÁK és TÁRGY táblázat így fog kinézni:
A fenti két TANULÓ és TÁRGY táblából láthatja, hogy a TANULÓ Roll = 4 táblázatból törlésre kerül, míg a TÁRGY táblában a Roll = 4 értékét NULL váltja fel. Ez bizonyítja, hogy az idegen kulcsnak null értéke lehet. Ha a TÁRGY táblázatban a Roll oszlop az elsődleges kulcs és az idegen kulcs, akkor ebben az esetben nem tudtunk egy idegen kulcsot NULL értékre állítani.