També es coneix com a restricció d'integritat referencial restricció de clau estrangera . Una clau estrangera és una clau els valors de la qual es deriven de la clau primària d'una altra taula.
La taula de la qual es deriven els valors es coneix com Mestre o Referent Taula i la taula en què s'insereixen els valors en conseqüència es coneix com Nen o Referència Taula, En altres paraules, podem dir que la taula que conté el clau estrangera s'anomena el taula infantil , i la taula que conté el Clau primària/clau candidata s'anomena el taula de referència o pare . Quan parlem del model relacional de la base de dades, la clau candidata es pot definir com un conjunt d'atributs que poden tenir zero o més atributs.
La sintaxi de la taula mestra o taula de referència és:
jtextfield
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Aquí la columna Roll actua com a Clau primària, que ajudarà a obtenir el valor de la clau estrangera a la taula fill.
La sintaxi de la taula fill o la taula de referència és:
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
A la taula anterior, la columna Roll actua com a Clau estrangera, els valors dels quals es deriven mitjançant el valor de Roll de la clau primària de la taula mestra.
Restricció de clau estrangera O restricció d'integritat referencial.
Hi ha dues restriccions d'integritat referencial:
Insereix restricció: El valor no es pot inserir a la taula CHILD si el valor no es troba a la taula MASTER
Suprimeix la restricció: El valor no es pot suprimir de la taula MASTER si el valor es troba a la taula CHILD
Suposem que voleu inserir Roll = 05 amb altres valors de columnes a la taula SUBJECT, de seguida veureu un error ' Restricció de clau estrangera violada 'és a dir, en executar una ordre d'inserció com:
Insereix als valors SUBJECT (5, 786, OS); SQL no s'entretindrà a causa de la restricció d'inserció (Com que no podeu inserir valor a una taula secundària si el valor no es troba a la taula mestra, ja que Roll = 5 no està present a la taula mestra, per tant no es permetrà introduir Roll = 5 a la taula principal )
De la mateixa manera, si voleu suprimir Roll = 4 de la taula STUDENT, immediatament veureu un error ' Restricció de clau estrangera violada 'és a dir, en executar una ordre d'eliminació com:
Suprimeix d'ALUMNE on Roll = 4; SQL no s'entretindrà a causa de la restricció d'eliminació. (Com que no podeu suprimir el valor de la taula mestra si el valor es troba a la taula fill, ja que Roll = 5 està present a la taula fill, per tant no es permetrà eliminar Roll = 5 de la taula mestra, si d'alguna manera hem aconseguit suprimir Roll = 5, llavors Roll = 5 estarà disponible a la taula fill, que finalment violarà la restricció d'inserció.
A SUPRIMIR EN CASCADA.
només nick
Segons la restricció d'eliminació: el valor no es pot suprimir de la taula MASTER si el valor es troba a la taula CHILD. La següent pregunta és si podem suprimir el valor de la taula mestra si el valor es troba a la taula secundària sense violar la restricció d'eliminació? és a dir, en el moment que suprimim el valor de la taula mestra, el valor corresponent també s'hauria d'eliminar de la taula fill.
La resposta a la pregunta anterior és SÍ, podem suprimir el valor de la taula mestra si el valor es troba a la taula fill sense violar la restricció d'eliminació, hem de fer una petita modificació mentre creem la taula fill, és a dir, afegint en suprimir la cascada .
SINTAXI DE LA TAULA
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
A la sintaxi anterior, just després de la paraula clau de referències (utilitzada per crear la clau estrangera), hem afegit una cascada de supressió, afegint-hi ara, podem eliminar el valor de la taula mestra si el valor es troba a la taula secundària sense violar la supressió. restricció. Ara, si voleu suprimir Roll = 5 de la taula mestra tot i que Roll = 5 es troba a la taula secundària, és possible perquè en el moment que doneu l'ordre d'eliminar Roll = 5 de la taula mestra, la fila té Roll = 5 de la taula fill també se suprimirà.
llista com a matriu
Es mostren les dues taules anteriors STUDENT i SUBJECT que tenen quatre valors cadascuna, ara suposem que voleu suprimir Roll = 4 de STUDENT( Master ) Table escrivint una ordre SQL: esborrar d'ESTUDENT on Tira = 4;
En el moment en què SQL executi l'ordre anterior, la fila que tingui Roll = 4 de la taula SUBJECT( Child ) també s'eliminarà, el resultat ALUMNE i ASSIGNATURA la taula serà així:
A les dues taules anteriors, ALUMNE i ASSIGNATURA, podeu veure que a les dues taules Roll = 4 s'elimina d'una vegada sense violar la restricció d'eliminació.
De vegades es fa una pregunta molt important a les entrevistes que: Pot la clau estrangera tenir valors NULL?
programa de nombres primers en java
La resposta a la pregunta anterior és SÍ, pot tenir valors NULL, mentre que la clau primària no pot ser NULL a qualsevol preu. Per entendre la pregunta anterior pràcticament, entenem a continuació el concepte de suprimir null.
ON DELETE NULL.
Segons la restricció d'eliminació: el valor no es pot suprimir de la taula MASTER si el valor es troba a la taula CHILD. La següent pregunta és si podem suprimir el valor de la taula mestra si el valor es troba a la taula secundària sense violar la restricció d'eliminació? és a dir, en el moment en què suprimim el valor de la taula mestra, el valor corresponent també s'hauria d'eliminar de la taula fill o es pot substituir pel valor NULL.
La resposta a la pregunta anterior és SÍ, podem suprimir el valor de la taula mestra si el valor es troba a la taula fill sense violar la restricció d'eliminació inserint NULL a la clau estrangera, hem de fer una petita modificació mentre creem la taula fill, és a dir. afegint en eliminar null .
SINTAXI DE LA TAULA:
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
A la sintaxi anterior, just després de la paraula clau de referències (utilitzada per crear una clau estrangera), hem afegit al eliminar null, afegint-ho ara, podem eliminar el valor de la taula mestra si el valor es troba a la taula secundària sense violar la supressió. restricció. Ara, si voleu eliminar Roll = 4 de la taula mestra tot i que Roll =4 es troba a la taula secundària, és possible perquè en el moment que doneu l'ordre d'eliminar Roll = 4 de la taula mestra, la fila té Roll = 4 de la taula fill es substituirà per un valor NULL.
Es mostren les dues taules anteriors STUDENT i SUBJECT que tenen quatre valors cadascuna, ara suposem que voleu suprimir Roll = 4 de STUDENT( Master ) Table escrivint una ordre SQL: esborrar d'ESTUDENT on Tira = 4;
En el moment en què SQL executi l'ordre anterior, la fila que tingui Roll = 4 de la taula SUBJECT( Child ) serà substituïda per un valor NULL, la resultant ALUMNE i ASSIGNATURA la taula serà així:
A les dues taules anteriors, STUDENT i SUBJECT, podeu veure que a la taula STUDENT Roll = 4 s'elimina mentre que el valor de Roll = 4 a la taula SUBJECT se substitueix per NULL. Això demostra que la clau estrangera pot tenir valors nuls. Si en el cas de la taula SUBJECT, la columna Roll és la clau primària juntament amb la clau estrangera, en aquest cas no podríem fer que una clau estrangera tingui valors NULL.