web-dev-qa-db-fra.com

Options de clé étrangère du plan de travail Mysql [Restrict, Cascade, Set Null, No Action], que font-elles?

Dans les options de clé étrangère lors de la mise à jour et de la suppression. Que fait chaque champ [Restreindre, Cascade, Définir Null, Aucune action]?

23
user2310173

Si vous prenez un par un:

Pour la mise à jour et la suppression:

si vous essayez de mettre à jour/supprimer la ligne parent:

Restreindre: Rien ne sera supprimé s'il y a une ligne enfant

Cascade: la ligne enfant sera également supprimée/mise à jour

Set Null: la colonne enfant sera définie sur null si vous supprimez le parent

Aucune action: La ligne enfant ne sera pas concernée par la suppression/mise à jour

39
Axel Agarrat

La table contenant la clé étrangère est appelée référence ou table enfant, et la table contenant la clé candidate est appelée référence ou table parent.

Set NULL: définit la valeur de la colonne sur NULL lorsque vous supprimez la ligne du tableau parent.

CASCADE : CASCADE va ​​propager le changement lorsque le parent change. Si vous supprimez une ligne, les lignes des tables contraintes qui font référence à cette ligne seront également supprimées, etc.

RESTREINDRE : RESTRICT fait que vous ne pouvez pas supprimer une donnée ligne parent si une ligne enfant existe qui fait référence la valeur de cette ligne parent.

NO ACTION: NO ACTION et RESTRICT se ressemblent beaucoup. lorsqu'une instruction UPDATE ou DELETE est exécutée sur la table référencée, le SGBD vérifie à la fin de l'exécution de l'instruction que les relations aucune des références sont violées. dans la ligne enfant courte, aucune préoccupation si la ligne parent supprimer ou mettre à jour.

24
Jay Patel

Lorsqu'une opération UPDATE ou DELETE affecte une valeur de clé dans la table parent qui a des lignes correspondantes dans la table enfant, le résultat dépend de l'action référentielle spécifiée à l'aide des sous-clauses ON UPDATE et ON DELETE de la clause FOREIGN KEY. MySQL prend en charge cinq options concernant l'action à entreprendre, listées ici:

CASCADE: Supprimer ou mettre à jour la ligne de la table parent, et supprimer ou mettre à jour automatiquement les lignes correspondantes dans la table enfant. ON DELETE CASCADE et ON UPDATE CASCADE sont pris en charge. Entre deux tables, ne définissez pas plusieurs clauses ON UPDATE CASCADE qui agissent sur la même colonne dans la table parent ou dans la table enfant.

SET NULL: Supprimez ou mettez à jour la ligne de la table parent et définissez la ou les colonnes de clé étrangère de la table enfant sur NULL. Les clauses ON DELETE SET NULL et ON UPDATE SET NULL sont prises en charge.

Si vous spécifiez une action SET NULL, assurez-vous que vous n'avez pas déclaré les colonnes de la table enfant comme NOT NULL.

RESTRICT: Rejette l'opération de suppression ou de mise à jour pour la table parent. La spécification de RESTRICT (ou NO ACTION) revient à omettre la clause ON DELETE ou ON UPDATE.

AUCUNE ACTION: Un mot-clé de SQL standard. Dans MySQL, équivalent à RESTRICT. Le serveur MySQL rejette l'opération de suppression ou de mise à jour de la table parent s'il existe une valeur de clé étrangère associée dans la table référencée. Certains systèmes de base de données ont des vérifications différées et NO ACTION est une vérification différée. Dans MySQL, les contraintes de clé étrangère sont vérifiées immédiatement, donc NO ACTION est identique à RESTRICT.

SET DEFAULT: Cette action est reconnue par l'analyseur MySQL, mais InnoDB rejette les définitions de table contenant les clauses ON DELETE SET DEFAULT ou ON UPDATE SET DEFAULT.

Pour un ON DELETE ou ON UPDATE non spécifié, l'action par défaut est toujours RESTRICT.

Texte ci-dessus copié de: https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign -keys.html

1
Hemanth