En referanseintegritetsbegrensning er også kjent som utenlandsk nøkkelbegrensning . En fremmednøkkel er en nøkkel hvis verdier er utledet fra primærnøkkelen til en annen tabell.
Tabellen som verdiene er utledet fra er kjent som Master eller referert Tabellen og tabellen som verdier settes inn i er kjent som Barn eller referanse Tabell, Med andre ord kan vi si at tabellen som inneholder fremmednøkkel kalles barnebord , og tabellen som inneholder Primærnøkkel/kandidatnøkkel kalles referert eller overordnet tabell . Når vi snakker om databaserelasjonsmodellen, kan kandidatnøkkelen defineres som et sett med attributter som kan ha null eller flere attributter.
Syntaksen til hovedtabellen eller refererttabellen er:
sql teller distinkt
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Her opptrer spalte Roll som Primærnøkkel, som vil hjelpe med å utlede verdien av fremmednøkkel i underordnet tabell.
Syntaksen til underordnet tabell eller referansetabell er:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
I tabellen ovenfor fungerer kolonnen Roll som fremmednøkkel, hvis verdier er utledet ved å bruke rulleverdien til primærnøkkelen fra hovedtabellen.
Foreign Key Constraint ELLER Referensiell integritetsbegrensning.
Det er to referanseintegritetsbegrensninger:
Sett inn begrensning: Verdi kan ikke settes inn i CHILD Table hvis verdien ikke ligger i MASTER Table
Slett begrensning: Verdi kan ikke slettes fra MASTER Table hvis verdien ligger i CHILD Table
Anta at du ville sette inn Roll = 05 med andre verdier av kolonner i SUBJECT Table, så vil du umiddelbart se en feil ' Begrensning for utenlandsk nøkkel er brutt ' dvs. når du kjører en innsettingskommando som:
primitive datatyper i java
Sett inn i SUBJECT-verdier(5, 786, OS); vil ikke bli underholdt av SQL på grunn av Insertion Constraint (Ettersom du ikke kan sette inn verdi i en underordnet tabell hvis verdien ikke ligger i hovedtabellen, siden Roll = 5 ikke er til stede i hovedtabellen, vil det derfor ikke være tillatt å angi Roll = 5 i barnetabellen )
På samme måte, hvis du vil slette Roll = 4 fra STUDENT Table, vil du umiddelbart se en feilmelding ' Begrensning for utenlandsk nøkkel er brutt ' dvs. når du kjører en slettekommando som:
Slett fra STUDENT der Roll = 4; vil ikke bli underholdt av SQL på grunn av slettingsbegrensning. ( Ettersom du ikke kan slette verdien fra hovedtabellen hvis verdien ligger i underordnet tabellen, siden Roll = 5 er til stede i underordnet tabellen, vil det derfor ikke være tillatt å slette Roll = 5 fra hovedtabellen, la hvis på en eller annen måte klarte vi å slette Roll = 5, så vil Roll = 5 være tilgjengelig i underordnet tabell som til slutt vil bryte innsettingsbegrensningen )
PÅ SLETT CASCADE.
I henhold til slettebegrensning: Verdien kan ikke slettes fra MASTER-tabellen hvis verdien ligger i CHILD-tabellen. Det neste spørsmålet kommer kan vi slette verdien fra mastertabellen hvis verdien ligger i underordnet tabellen uten å bryte slettebegrensningen? dvs. i det øyeblikket vi sletter verdien fra hovedtabellen, bør verdien som tilsvarer den også bli slettet fra den underordnede tabellen.
funksjoner i en panda-serie
Svaret på spørsmålet ovenfor er JA, vi kan slette verdien fra hovedtabellen hvis verdien ligger i underordnet tabellen uten å bryte slettingsbegrensningen, vi må gjøre en liten modifikasjon mens vi oppretter den underordnede tabellen, dvs. ved å legge til på slette kaskade .
BORDSYNTAKS
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
I syntaksen ovenfor, like etter referanser nøkkelord( brukt for å lage fremmednøkkel), har vi lagt til på delete cascade, ved å legge til slike nå, kan vi slette verdien fra mastertabellen hvis verdien ligger i den underordnede tabellen uten å bryte slettingen begrensning. Hvis du nå ville slette Roll = 5 fra mastertabellen selv om Roll = 5 ligger i undertabellen, er det mulig fordi i det øyeblikket du gir kommandoen om å slette Roll = 5 fra mastertabellen, vil raden med Roll = 5 fra barnetabellen vil også bli slettet.
De to ovennevnte tabellene STUDENT og SUBJECT med fire verdier hver vises, anta nå at du ønsker å slette Roll = 4 fra STUDENT( Master ) Table ved å skrive en SQL-kommando: slett fra STUDENT der Roll = 4;
I det øyeblikket SQL utfører kommandoen ovenfor, vil raden med Roll = 4 fra SUBJECT( Child ) Table også bli slettet, den resulterende STUDENT og FAG tabellen vil se slik ut:
Fra de to ovennevnte tabellene STUDENT og SUBJECT, kan du se at i begge tabellene blir Roll = 4 slettet på en gang uten å bryte slettingsbegrensningen.
Noen ganger stilles det et veldig viktig spørsmål i intervjuer som: Kan Foreign Key ha NULL-verdier?
Svaret på spørsmålet ovenfor er JA, det kan ha NULL-verdier, mens primærnøkkelen ikke kan være NULL for enhver pris. For å forstå spørsmålet ovenfor praktisk talt, la oss forstå nedenfor konseptet slett null.
PÅ SLETT NULL.
I henhold til slettebegrensning: Verdien kan ikke slettes fra MASTER-tabellen hvis verdien ligger i CHILD-tabellen. Det neste spørsmålet kommer kan vi slette verdien fra mastertabellen hvis verdien ligger i underordnet tabellen uten å bryte slettebegrensningen? dvs. i det øyeblikket vi sletter verdien fra hovedtabellen, bør verdien som tilsvarer den også slettes fra underordnet tabellen eller kan erstattes med NULL-verdien.
Svaret på spørsmålet ovenfor er JA, vi kan slette verdien fra hovedtabellen hvis verdien ligger i barnetabellen uten å bryte slettebegrensningen ved å sette inn NULL i fremmednøkkelen, vi må gjøre en liten modifikasjon mens vi lager barnetabell, dvs. ved å legge til ved sletting null .
hva er skjermstørrelsen min
TABELL SYNTAKS:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
I syntaksen ovenfor, like etter referanser nøkkelord( brukt for å lage fremmednøkkel), har vi lagt til delete null, ved å legge til en slik nå, kan vi slette verdien fra hovedtabellen hvis verdien ligger i underordnet tabell uten å bryte med sletting begrensning. Hvis du nå ønsker å slette Roll = 4 fra mastertabellen selv om Roll =4 ligger i barnetabellen, er det mulig fordi i det øyeblikket du gir kommandoen om å slette Roll = 4 fra mastertabellen, vil raden med Roll = 4 fra underordnet tabell vil bli erstattet med en NULL-verdi.
De to ovennevnte tabellene STUDENT og SUBJECT med fire verdier hver vises, anta nå at du ønsker å slette Roll = 4 fra STUDENT( Master ) Table ved å skrive en SQL-kommando: slett fra STUDENT der Roll = 4;
I det øyeblikket SQL utfører kommandoen ovenfor, vil raden med Roll = 4 fra SUBJECT( Child ) Table bli erstattet med en NULL-verdi, den resulterende STUDENT og FAG tabellen vil se slik ut:
Fra de to ovennevnte tabellene STUDENT og SUBJECT, kan du se at i tabellen STUDENT Roll = 4 blir slettet mens verdien av Roll = 4 i SUBJECT-tabellen er erstattet med NULL. Dette beviser at fremmednøkkelen kan ha nullverdier. Hvis i tilfellet i SUBJECT Table, kolonne Roll er primærnøkkel sammen med fremmednøkkel, så kunne vi i så fall ikke lage en fremmednøkkel til å ha NULL-verdier.