En referensintegritetsbegränsning kallas också utländsk nyckel begränsning . En främmande nyckel är en nyckel vars värden härleds från den primära nyckeln i en annan tabell.
Tabellen som värdena härleds från kallas Master eller Refererad Tabellen och tabellen där värden infogas i enlighet därmed kallas Barn eller hänvisning Tabell, Med andra ord kan vi säga att tabellen som innehåller främmande nyckel kallas barn bord , och tabellen som innehåller Primärnyckel/kandidatnyckel kallas refererad eller överordnad tabell . När vi talar om databasens relationsmodell kan kandidatnyckeln definieras som en uppsättning attribut som kan ha noll eller fler attribut.
Syntaxen för huvudtabellen eller referenstabellen är:
gnista handledning
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Här agerar kolumn Roll som Primärnyckel, vilket kommer att hjälpa till att härleda värdet av främmande nyckel i den underordnade tabellen.
Syntaxen för underordnad tabell eller referenstabell är:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
I tabellen ovan fungerar kolumnen Roll som Främmande nyckel, vars värden härleds med hjälp av rullvärdet för primärnyckeln från huvudtabellen.
Utländsk nyckelbegränsning ELLER Referensintegritetsbegränsning.
Det finns två referensintegritetsbegränsningar:
Infoga begränsning: Värdet kan inte infogas i CHILD Table om värdet inte ligger i MASTER Table
Ta bort begränsning: Värdet kan inte tas bort från MASTER Table om värdet ligger i CHILD Table
Anta att du ville infoga Roll = 05 med andra värden för kolumner i SUBJECT Table, då kommer du omedelbart att se ett fel ' Begränsning för främmande nyckel har brutits ' d.v.s. när du kör ett infogningskommando som:
Infoga i SUBJECT-värden(5, 786, OS); kommer inte att underhållas av SQL på grund av Insertion Constraint (Eftersom du inte kan infoga värde i en underordnad tabell om värdet inte ligger i huvudtabellen, eftersom Roll = 5 inte finns i huvudtabellen, kommer det därför inte att tillåtas att ange Roll = 5 i underordnad tabell )
På samma sätt, om du vill ta bort Roll = 4 från STUDENT Table, kommer du omedelbart att se ett felmeddelande ' Begränsning för främmande nyckel har brutits d.v.s. när du kör ett raderingskommando som:
Ta bort från STUDENT där Roll = 4; kommer inte att underhållas av SQL på grund av raderingsbegränsning. ( Eftersom du inte kan ta bort värdet från huvudtabellen om värdet ligger i undertabellen, eftersom Roll = 5 finns i undertabellen, så kommer det inte att vara tillåtet att ta bort Roll = 5 från huvudtabellen, låter om på något sätt lyckades vi ta bort Roll = 5, sedan kommer Roll = 5 att vara tillgänglig i den underordnade tabellen som till slut kommer att bryta mot insättningsbegränsningen.
slumpmässigt i c
PÅ DELETE CASCADE.
Enligt raderingsbegränsning: Värdet kan inte tas bort från MASTER-tabellen om värdet ligger i CHILD-tabellen. Nästa fråga kommer kan vi ta bort värdet från mastertabellen om värdet ligger i den underordnade tabellen utan att bryta mot raderingsbegränsningen? d.v.s. i det ögonblick vi tar bort värdet från huvudtabellen bör värdet som motsvarar det också tas bort från den underordnade tabellen.
Svaret på frågan ovan är JA, vi kan ta bort värdet från huvudtabellen om värdet ligger i den underordnade tabellen utan att bryta mot raderingsbegränsningen, vi måste göra en liten modifiering när vi skapar den underordnade tabellen, d.v.s. genom att lägga till på radera kaskad .
k-nn algoritm
BORDSSYNTAX
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
I ovanstående syntax, precis efter referenser nyckelord (används för att skapa främmande nyckel), har vi lagt till på delete cascade, genom att lägga till en sådan nu, kan vi ta bort värdet från mastertabellen om värdet ligger i den underordnade tabellen utan att bryta borttagningen begränsning. Om du nu vill ta bort Roll = 5 från mastertabellen trots att Roll = 5 ligger i undertabellen, är det möjligt eftersom det ögonblick du ger kommandot att radera Roll = 5 från mastertabellen, raden med Roll = 5 från barntabellen kommer också att tas bort.
Ovanstående två tabeller STUDENT och SUBJECT med fyra värden vardera visas, anta nu att du vill ta bort Roll = 4 från STUDENT( Master ) Table genom att skriva ett SQL-kommando: ta bort från STUDENT där Roll = 4;
I det ögonblick som SQL utför kommandot ovan kommer raden med Roll = 4 från SUBJECT( Child ) Table också att raderas, den resulterande STUDENT och ÄMNE tabellen kommer att se ut så här:
Från de två ovanstående tabellerna STUDENT och SUBJECT kan du se att i båda tabellen raderas Roll = 4 på en gång utan att bryta mot raderingsrestriktioner.
Ibland ställs en mycket viktig fråga i intervjuer som: Kan Foreign Key ha NULL-värden?
Svaret på ovanstående fråga är JA, den kan ha NULL-värden, medan den primära nyckeln inte kan vara NULL till varje pris. För att förstå ovanstående fråga praktiskt taget låt oss förstå nedan begreppet delete null.
PÅ DELETE NULL.
Enligt raderingsbegränsning: Värdet kan inte tas bort från MASTER-tabellen om värdet ligger i CHILD-tabellen. Nästa fråga kommer kan vi ta bort värdet från mastertabellen om värdet ligger i den underordnade tabellen utan att bryta mot raderingsbegränsningen? d.v.s. i det ögonblick vi tar bort värdet från huvudtabellen bör värdet motsvarande det också tas bort från underordnade tabellen eller kan ersättas med NULL-värdet.
Svaret på ovanstående fråga är JA, vi kan ta bort värdet från huvudtabellen om värdet ligger i underordnad tabell utan att bryta mot raderingsbegränsningen genom att infoga NULL i den främmande nyckeln, vi måste göra en liten modifiering medan vi skapar underordnade tabeller, d.v.s. genom att lägga till vid radering null .
TABELL SYNTAX:
java-tecken till int
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
I ovanstående syntax, precis efter referenser nyckelord (används för att skapa främmande nyckel), har vi lagt till delete null, genom att lägga till ett sådant nu kan vi ta bort värdet från mastertabellen om värdet ligger i den underordnade tabellen utan att bryta mot raderingen begränsning. Om du nu vill ta bort Roll = 4 från mastertabellen trots att Roll =4 ligger i undertabellen, är det möjligt eftersom det ögonblick du ger kommandot att radera Roll = 4 från mastertabellen, raden med Roll = 4 från den underordnade tabellen kommer att ersättas av ett NULL-värde.
Ovanstående två tabeller STUDENT och SUBJECT med fyra värden vardera visas, anta nu att du vill ta bort Roll = 4 från STUDENT( Master ) Table genom att skriva ett SQL-kommando: ta bort från STUDENT där Roll = 4;
I det ögonblick som SQL utför kommandot ovan kommer raden med Roll = 4 från SUBJECT( Child ) Table att ersättas med ett NULL-värde, den resulterande STUDENT och ÄMNE tabellen kommer att se ut så här:
Från ovanstående två tabeller STUDENT och SUBJECT, kan du se att i tabellen STUDENT Roll = 4 raderas medan värdet på Roll = 4 i SUBJECT-tabellen ersätts med NULL. Detta bevisar att den främmande nyckeln kan ha nollvärden. Om i fallet i SUBJECT Table, kolumn Roll är primärnyckel tillsammans med främmande nyckel så kunde vi i så fall inte göra en främmande nyckel att ha NULL-värden.