Een referentiële integriteitsbeperking wordt ook wel genoemd externe sleutelbeperking . Een externe sleutel is een sleutel waarvan de waarden zijn afgeleid van de primaire sleutel van een andere tabel.
De tabel waaruit de waarden zijn afgeleid, staat bekend als Master of waarnaar wordt verwezen Tabel en de tabel waarin waarden dienovereenkomstig worden ingevoegd, staat bekend als Kind of verwijzing Tabel, Met andere woorden, we kunnen zeggen dat de tabel met de vreemde sleutel heet de kindertafel en de tabel met de Primaire sleutel/kandidaatsleutel heet de waarnaar wordt verwezen of de bovenliggende tabel . Als we het hebben over het databaserelationele model, kan de kandidaatsleutel worden gedefinieerd als een set attributen die nul of meer attributen kunnen hebben.
De syntaxis van de hoofdtabel of de tabel waarnaar wordt verwezen is:
boto3
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Hier fungeert kolom Roll als Hoofdsleutel, wat zal helpen bij het afleiden van de waarde van de externe sleutel in de onderliggende tabel.
De syntaxis van de onderliggende tabel of verwijzingstabel is:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
In de bovenstaande tabel fungeert kolom Roll als Vreemde sleutel, waarvan de waarden zijn afgeleid met behulp van de Roll-waarde van de primaire sleutel uit de hoofdtabel.
Beperking van externe sleutel OF beperking van referentiële integriteit.
Er zijn twee referentiële integriteitsbeperkingen:
Beperking invoegen: Waarde kan niet in de CHILD-tabel worden ingevoegd als de waarde niet in de MASTER-tabel ligt
bubbelachtige python
Beperking verwijderen: Waarde kan niet worden verwijderd uit de MASTER-tabel als de waarde in de CHILD-tabel ligt
Stel dat je Roll = 05 wilt invoegen met andere waarden van kolommen in de SUBJECT-tabel, dan zie je meteen een foutmelding ' Externe sleutelbeperking geschonden ' Dat wil zeggen bij het uitvoeren van een invoegopdracht als:
Voeg in SUBJECT-waarden in (5, 786, OS); wordt niet vermaakt door SQL vanwege invoegbeperkingen (Omdat u geen waarde in een onderliggende tabel kunt invoegen als de waarde niet in de hoofdtabel ligt, aangezien Roll = 5 niet aanwezig is in de hoofdtabel, is het daarom niet toegestaan om Roll = 5 in de onderliggende tabel in te voeren)
Op dezelfde manier, als u Roll = 4 uit de STUDENT-tabel wilt verwijderen, ziet u onmiddellijk een foutmelding ' Externe sleutelbeperking geschonden ' Dat wil zeggen bij het uitvoeren van een verwijderopdracht als:
Verwijder uit STUDENT waar Roll = 4; wordt niet vermaakt door SQL vanwege verwijderingsbeperkingen. (Aangezien u de waarde niet uit de hoofdtabel kunt verwijderen als de waarde in de onderliggende tabel ligt, aangezien Roll = 5 aanwezig is in de onderliggende tabel, is het daarom niet toegestaan om Roll = 5 uit de hoofdtabel te verwijderen. op de een of andere manier zijn we erin geslaagd Roll = 5 te verwijderen, waarna Roll = 5 beschikbaar zal zijn in de onderliggende tabel, wat uiteindelijk de invoegbeperking zal schenden.
OP VERWIJDER CASCADE.
Conform de verwijderingsbeperking: Waarde kan niet worden verwijderd uit de MASTER-tabel als de waarde in de CHILD-tabel ligt. De volgende vraag komt: kunnen we de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijderingsbeperking te schenden? Dat wil zeggen: op het moment dat we de waarde uit de hoofdtabel verwijderen, moet de waarde die ermee correspondeert ook uit de onderliggende tabel worden verwijderd.
Het antwoord op de bovenstaande vraag is JA. We kunnen de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijderingsbeperking te schenden. We moeten een kleine wijziging aanbrengen tijdens het maken van de onderliggende tabel, d.w.z. door toe te voegen bij verwijderingscascade .
TABELSYNTAXIS
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
In de bovenstaande syntaxis hebben we, net na het referentiesleutelwoord (gebruikt voor het maken van een externe sleutel), een verwijdercascade toegevoegd. Door dit nu toe te voegen, kunnen we de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijdering te schenden beperking. Als u nu Roll = 5 uit de hoofdtabel wilt verwijderen, ook al ligt Roll = 5 in de onderliggende tabel, is dat mogelijk omdat op het moment dat u de opdracht geeft om Roll = 5 uit de hoofdtabel te verwijderen, de rij met Roll = 5 uit de onderliggende tabel wordt ook verwijderd.
De bovenstaande twee tabellen STUDENT en SUBJECT met elk vier waarden worden weergegeven. Stel nu dat u Roll = 4 uit de STUDENT(Master)-tabel wilt verwijderen door een SQL-opdracht te schrijven: verwijder uit STUDENT waar Roll = 4;
conversie van string naar geheel getal in Java
Op het moment dat SQL het bovenstaande commando uitvoert, wordt de rij met Roll = 4 uit de SUBJECT( Child ) Table ook verwijderd. De resulterende STUDENT en ONDERWERP tabel ziet er als volgt uit:
Uit de bovenstaande twee tabellen STUDENT en SUBJECT kunt u zien dat in beide tabellen Roll = 4 in één keer wordt verwijderd zonder de verwijderingsbeperking te schenden.
Soms wordt in interviews een heel belangrijke vraag gesteld: Kan Foreign Key NULL-waarden hebben?
Het antwoord op de bovenstaande vraag is JA. Deze kan NULL-waarden hebben, terwijl de primaire sleutel niet koste wat het kost NULL kan zijn. Om de bovenstaande vraag praktisch te begrijpen, laten we hieronder het concept van verwijderen null begrijpen.
fout: kon de hoofdklasse niet vinden of laden
AAN VERWIJDEREN NULL.
Conform de verwijderingsbeperking: Waarde kan niet worden verwijderd uit de MASTER-tabel als de waarde in de CHILD-tabel ligt. De volgende vraag komt: kunnen we de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijderingsbeperking te schenden? Dat wil zeggen dat op het moment dat we de waarde uit de hoofdtabel verwijderen, de waarde die ermee correspondeert ook uit de onderliggende tabel moet worden verwijderd of kan worden vervangen door de NULL-waarde.
Het antwoord op de bovenstaande vraag is JA, we kunnen de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijderingsbeperking te schenden door NULL in de externe sleutel in te voegen. We moeten een kleine wijziging aanbrengen tijdens het maken van de onderliggende tabel, d.w.z. door toe te voegen bij verwijderen nul .
TABELSYNTAXIS:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
In de bovenstaande syntaxis hebben we, net na het referentiesleutelwoord (gebruikt voor het maken van een externe sleutel), een verwijder null toegevoegd. Door dit nu toe te voegen, kunnen we de waarde uit de hoofdtabel verwijderen als de waarde in de onderliggende tabel ligt zonder de verwijdering te schenden beperking. Als u nu Roll = 4 uit de hoofdtabel wilt verwijderen, ook al ligt Roll = 4 in de onderliggende tabel, is dat mogelijk omdat op het moment dat u de opdracht geeft om Roll = 4 uit de hoofdtabel te verwijderen, de rij met Roll = 4 uit de onderliggende tabel wordt vervangen door een NULL-waarde.
De bovenstaande twee tabellen STUDENT en SUBJECT met elk vier waarden worden weergegeven. Stel nu dat u Roll = 4 uit de STUDENT(Master)-tabel wilt verwijderen door een SQL-opdracht te schrijven: verwijder uit STUDENT waar Roll = 4;
Op het moment dat SQL het bovenstaande commando uitvoert, wordt de rij met Roll = 4 uit SUBJECT( Child ) Table vervangen door een NULL-waarde. STUDENT en ONDERWERP tabel ziet er als volgt uit:
Uit de bovenstaande twee tabellen STUDENT en SUBJECT kunt u zien dat in tabel STUDENT Roll = 4 wordt verwijderd, terwijl de waarde van Roll = 4 in de SUBJECT-tabel wordt vervangen door NULL. Dit bewijst dat de Foreign key nulwaarden kan hebben. Als in het geval in de SUBJECT-tabel de kolom Roll de primaire sleutel is samen met de Foreign Key, dan kunnen we in dat geval geen externe sleutel maken met NULL-waarden.