Une contrainte d'intégrité référentielle est également connue sous le nom de contrainte de clé étrangère . Une clé étrangère est une clé dont les valeurs sont dérivées de la clé primaire d'une autre table.
Le tableau à partir duquel les valeurs sont dérivées est appelé Maître ou Référencé Tableau et le tableau dans lequel les valeurs sont insérées en conséquence est appelé Enfant ou référencement Tableau, Autrement dit, on peut dire que le tableau contenant les clé étrangère s'appelle le table enfant , et le tableau contenant les Clé primaire/clé candidate s'appelle le table référencée ou parent . Lorsque nous parlons de modèle relationnel de base de données, la clé candidate peut être définie comme un ensemble d'attributs pouvant avoir zéro ou plusieurs attributs.
La syntaxe de la table maître ou de la table référencée est :
renommer dans le répertoire Linux
CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) );
Ici, la colonne Roll fait office de Clé primaire, ce qui aidera à dériver la valeur de la clé étrangère dans la table enfant.
La syntaxe de la table enfant ou de la table de référence est :
CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) );
Dans le tableau ci-dessus, la colonne Roll fait office de Clé étrangère, dont les valeurs sont dérivées à l'aide de la valeur Roll de la clé primaire de la table principale.
Contrainte de clé étrangère OU contrainte d’intégrité référentielle.
Il existe deux contraintes d'intégrité référentielle :
Insérer une contrainte : La valeur ne peut pas être insérée dans la table CHILD si la valeur ne se trouve pas dans la table MASTER
théorie des arbres et des graphes
Supprimer la contrainte : La valeur ne peut pas être supprimée de la table MASTER si la valeur se trouve dans la table CHILD
Supposons que vous souhaitiez insérer Roll = 05 avec d'autres valeurs de colonnes dans la table SUBJECT, vous verrez immédiatement une erreur ' Contrainte de clé étrangère violée 'c'est-à-dire lors de l'exécution d'une commande d'insertion comme :
Insérer dans les valeurs SUBJECT (5, 786, OS) ; ne sera pas diverti par SQL en raison de la contrainte d'insertion (Comme vous ne pouvez pas insérer de valeur dans une table enfant si la valeur ne se trouve pas dans la table maître, puisque Roll = 5 n'est pas présent dans la table maître, il ne sera donc pas autorisé d'entrer Roll = 5 dans la table enfant)
De même, si vous souhaitez supprimer Roll = 4 de la table STUDENT, vous verrez immédiatement une erreur ' Contrainte de clé étrangère violée 'c'est-à-dire lors de l'exécution d'une commande de suppression en tant que :
Supprimer de STUDENT où Roll = 4 ; ne sera pas pris en charge par SQL en raison d'une contrainte de suppression. (Comme vous ne pouvez pas supprimer la valeur de la table maître si la valeur se trouve dans la table enfant, puisque Roll = 5 est présent dans la table enfant, il ne sera donc pas autorisé à supprimer Roll = 5 de la table maître, disons si d'une manière ou d'une autre, nous avons réussi à supprimer Roll = 5, alors Roll = 5 sera disponible dans la table enfant, ce qui finira par violer la contrainte d'insertion.)
SUR SUPPRIMER CASCADE.
Conformément à la contrainte de suppression : la valeur ne peut pas être supprimée de la table MASTER si la valeur se trouve dans la table CHILD. La question suivante se pose : pouvons-nous supprimer la valeur de la table principale si la valeur se trouve dans la table enfant sans violer la contrainte de suppression ? c'est-à-dire qu'au moment où nous supprimons la valeur de la table principale, la valeur qui lui correspond doit également être supprimée de la table enfant.
La réponse à la question ci-dessus est OUI, nous pouvons supprimer la valeur de la table maître si la valeur se trouve dans la table enfant sans violer la contrainte de suppression, nous devons faire de légères modifications lors de la création de la table enfant, c'est-à-dire en ajoutant lors de la suppression de la cascade .
SYNTAXE DES TABLEAUX
CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) );
Dans la syntaxe ci-dessus, juste après le mot-clé references (utilisé pour créer une clé étrangère), nous avons ajouté une cascade de suppression, en l'ajoutant maintenant, nous pouvons supprimer la valeur de la table maître si la valeur se trouve dans la table enfant sans violer la suppression. contrainte. Maintenant, si vous souhaitez supprimer Roll = 5 de la table maître même si Roll = 5 se trouve dans la table enfant, c'est possible car au moment où vous donnez la commande de supprimer Roll = 5 de la table maître, la ligne ayant Roll = 5 de la table enfant sera également supprimé.
Les deux tables ci-dessus STUDENT et SUBJECT ayant chacune quatre valeurs sont affichées. Supposons maintenant que vous cherchiez à supprimer Roll = 4 de la table STUDENT (Master) en écrivant une commande SQL : supprimer de STUDENT où Roll = 4 ;
différenciation partielle dans le latex
Au moment où SQL exécute la commande ci-dessus, la ligne ayant Roll = 4 de la table SUBJECT (enfant) sera également supprimée. Le résultat ÉTUDIANT et SUJET le tableau ressemblera à :
À partir des deux tableaux ci-dessus STUDENT et SUBJECT, vous pouvez voir que dans les deux tableaux Roll = 4 est supprimé d'un seul coup sans violer la contrainte de suppression.
Parfois, une question très importante est posée lors des entretiens : la clé étrangère peut-elle avoir des valeurs NULL ?
La réponse à la question ci-dessus est OUI, elle peut avoir des valeurs NULL, alors que la clé primaire ne peut à aucun prix être NULL. Pour comprendre pratiquement la question ci-dessus, comprenons ci-dessous le concept de suppression null.
chaîne json java
SUR SUPPRIMER NULL.
Conformément à la contrainte de suppression : la valeur ne peut pas être supprimée de la table MASTER si la valeur se trouve dans la table CHILD. La question suivante se pose : pouvons-nous supprimer la valeur de la table principale si la valeur se trouve dans la table enfant sans violer la contrainte de suppression ? c'est-à-dire qu'au moment où nous supprimons la valeur de la table principale, la valeur qui lui correspond doit également être supprimée de la table enfant ou peut être remplacée par la valeur NULL.
La réponse à la question ci-dessus est OUI, nous pouvons supprimer la valeur de la table principale si la valeur se trouve dans la table enfant sans violer la contrainte de suppression en insérant NULL dans la clé étrangère, nous devons faire de légères modifications lors de la création de la table enfant, c'est-à-dire en ajoutant lors de la suppression de null .
SYNTAXE DU TABLEAU :
CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) );
Dans la syntaxe ci-dessus, juste après le mot-clé references (utilisé pour créer une clé étrangère), nous avons ajouté sur delete null, en l'ajoutant maintenant, nous pouvons supprimer la valeur de la table maître si la valeur se trouve dans la table enfant sans violer la suppression. contrainte. Maintenant, si vous souhaitez supprimer Roll = 4 de la table maître même si Roll = 4 se trouve dans la table enfant, c'est possible car au moment où vous donnez la commande de supprimer Roll = 4 de la table maître, la ligne ayant Roll = 4 de la table enfant sera remplacé par une valeur NULL.
Les deux tables ci-dessus STUDENT et SUBJECT ayant chacune quatre valeurs sont affichées. Supposons maintenant que vous cherchiez à supprimer Roll = 4 de la table STUDENT (Master) en écrivant une commande SQL : supprimer de STUDENT où Roll = 4 ;
Au moment où SQL exécute la commande ci-dessus, la ligne ayant Roll = 4 de la table SUBJECT (enfant) sera remplacée par une valeur NULL, le résultat ÉTUDIANT et SUJET le tableau ressemblera à :
À partir des deux tableaux ci-dessus STUDENT et SUBJECT, vous pouvez voir que dans le tableau STUDENT Roll = 4 est supprimé tandis que la valeur de Roll = 4 dans la table SUBJECT est remplacée par NULL. Cela prouve que la clé étrangère peut avoir des valeurs nulles. Si dans le cas de la table SUBJECT, la colonne Roll est la clé primaire avec la clé étrangère, alors dans ce cas, nous ne pouvons pas créer une clé étrangère pour avoir des valeurs NULL.