Ograničenje referentnog integriteta također je poznato kao ograničenje stranog ključa . Strani ključ je ključ čije su vrijednosti izvedene iz primarnog ključa druge tablice.
Tablica iz koje se izvode vrijednosti poznata je kao Glavni ili Referencirani Tablica, a tablica u koju su umetnute vrijednosti poznata je kao Dijete ili referenciranje Tablica, Drugim riječima, možemo reći da tablica koja sadrži strani kljuc naziva se dječji stol , i tablicu koja sadrži Primarni ključ/ključ kandidata naziva se referencirana ili nadređena tablica . Kada govorimo o relacijskom modelu baze podataka, ključ kandidata može se definirati kao skup atributa koji može imati nula ili više atributa.
Sintaksa glavne tablice ili referentne tablice je:
java lokalni datumvrijeme
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Ovdje stupac Roll nastupa kao Glavni ključ, koji će pomoći u izvođenju vrijednosti stranog ključa u podređenoj tablici.
Sintaksa podređene tablice ili referentne tablice je:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
U gornjoj tablici stupac Roll djeluje kao Strani kljuc, čije su vrijednosti izvedene pomoću Roll vrijednosti primarnog ključa iz glavne tablice.
Ograničenje stranog ključa ILI ograničenje referentnog integriteta.
Postoje dva ograničenja referentnog integriteta:
Umetni ograničenje: Vrijednost se ne može umetnuti u tablicu CHILD ako vrijednost ne leži u tablici MASTER
Izbriši ograničenje: Vrijednost se ne može izbrisati iz MASTER tablice ako se vrijednost nalazi u CHILD tablici
Pretpostavimo da ste željeli umetnuti Roll = 05 s drugim vrijednostima stupaca u tablici SUBJECT, tada ćete odmah vidjeti pogrešku ' Prekršeno ograničenje stranog ključa ' tj. prilikom pokretanja naredbe za umetanje kao:
Umetni u SUBJECT values(5, 786, OS); neće biti zabavljen SQL-om zbog ograničenja umetanja (Kako ne možete umetnuti vrijednost u podređenu tablicu ako vrijednost ne leži u glavnoj tablici, budući da Roll = 5 nije prisutan u glavnoj tablici, stoga neće biti dopušten unos Roll = 5 u podređenu tablicu)
Slično, ako želite izbrisati Roll = 4 iz tablice STUDENT, tada ćete odmah vidjeti pogrešku ' Prekršeno ograničenje stranog ključa ' tj. prilikom pokretanja naredbe za brisanje kao:
Izbriši iz STUDENTA gdje je Roll = 4; neće biti zabavljen SQL-om zbog ograničenja brisanja. ( Budući da ne možete izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici, budući da je Roll = 5 prisutan u podređenoj tablici, stoga neće biti dopušteno brisati Roll = 5 iz glavne tablice, ako nekako smo uspjeli izbrisati Roll = 5, tada će Roll = 5 biti dostupan u podređenoj tablici što će u konačnici prekršiti ograničenje umetanja.
ON DELETE CASCADE.
arraylist java
Prema ograničenju brisanja: Vrijednost se ne može izbrisati iz MASTER tablice ako se vrijednost nalazi u CHILD tablici. Sljedeće pitanje dolazi možemo li izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja ograničenja brisanja? tj. U trenutku kada izbrišemo vrijednost iz glavne tablice, vrijednost koja joj odgovara također bi se trebala izbrisati iz podređene tablice.
Odgovor na gornje pitanje je DA, možemo izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja ograničenja brisanja, moramo izvršiti male izmjene dok stvaramo podređenu tablicu, tj. dodavanjem na kaskadi brisanja .
SINTAKSA TABLICE
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
U gornjoj sintaksi, odmah nakon ključne riječi reference (koja se koristi za stvaranje stranog ključa), dodali smo kaskadu brisanja, dodavanjem takve sada, možemo izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja brisanja ograničenje. Sada, ako želite izbrisati Roll = 5 iz glavne tablice iako Roll = 5 leži u podređenoj tablici, to je moguće jer u trenutku kada date naredbu za brisanje Roll = 5 iz glavne tablice, red koji ima Roll = 5 iz podređene tablice također će se izbrisati.
usporedba nizova java
Prikazane su gornje dvije tablice STUDENT i SUBJECT koje imaju po četiri vrijednosti, sada pretpostavimo da želite izbrisati Roll = 4 iz STUDENT( Master ) tablice pisanjem SQL naredbe: brisanje iz STUDENTA gdje Roll = 4;
U trenutku kada SQL izvrši gornju naredbu, red koji ima Roll = 4 iz tablice SUBJECT( Child ) također će biti izbrisan, rezultanta UČENIK i PREDMET tablica će izgledati ovako:
Iz gornje dvije tablice STUDENT i SUBJECT, možete vidjeti da se u obje tablice Roll = 4 briše odjednom bez kršenja ograničenja brisanja.
Ponekad se u intervjuima postavlja vrlo važno pitanje: Može li vanjski ključ imati NULL vrijednosti?
java jednako
Odgovor na gornje pitanje je DA, može imati NULL vrijednosti, dok primarni ključ ni pod koju cijenu ne može biti NULL. Kako bismo praktično razumjeli gornje pitanje, shvatimo u nastavku koncept brisanja nule.
ON DELETE NULL.
Prema ograničenju brisanja: Vrijednost se ne može izbrisati iz MASTER tablice ako se vrijednost nalazi u CHILD tablici. Sljedeće pitanje dolazi možemo li izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja ograničenja brisanja? tj. u trenutku kada izbrišemo vrijednost iz glavne tablice, vrijednost koja joj odgovara također bi se trebala izbrisati iz podređene tablice ili se može zamijeniti s NULL vrijednošću.
Odgovor na gornje pitanje je DA, možemo izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja ograničenja brisanja umetanjem NULL-a u strani ključ, moramo napraviti male modifikacije dok stvaramo podređenu tablicu, tj. dodavanjem na brisanje null .
SINTAKSA TABLICE:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
U gornjoj sintaksi, odmah nakon ključne riječi reference( koja se koristi za stvaranje stranog ključa), dodali smo on delete null, dodajući to sada, možemo izbrisati vrijednost iz glavne tablice ako vrijednost leži u podređenoj tablici bez kršenja brisanja ograničenje. Sada ako želite izbrisati Roll = 4 iz glavne tablice iako Roll =4 leži u podređenoj tablici, to je moguće jer u trenutku kada date naredbu za brisanje Roll = 4 iz glavne tablice, red koji ima Roll = 4 iz podređene tablice bit će zamijenjena NULL vrijednošću.
Prikazane su gornje dvije tablice STUDENT i SUBJECT koje imaju po četiri vrijednosti, sada pretpostavimo da želite izbrisati Roll = 4 iz STUDENT( Master ) tablice pisanjem SQL naredbe: brisanje iz STUDENTA gdje Roll = 4;
U trenutku kada SQL izvrši gornju naredbu, redak koji ima Roll = 4 iz tablice SUBJECT( Child ) bit će zamijenjen NULL vrijednošću, rezultanta UČENIK i PREDMET tablica će izgledati ovako:
Iz gornje dvije tablice STUDENT i SUBJECT možete vidjeti da se u tablici STUDENT Roll = 4 briše dok se vrijednost Roll = 4 u tablici SUBJECT zamjenjuje s NULL. Ovo dokazuje da vanjski ključ može imati nulte vrijednosti. Ako je u slučaju u tablici SUBJECT, stupac Roll primarni ključ zajedno sa stranim ključem, tada u tom slučaju ne možemo učiniti da strani ključ ima NULL vrijednosti.