web-dev-qa-db-fra.com

Configuration des relations avec les tables Que font "Cascade", "Set Null" et "Restrict"?

Je veux commencer à utiliser les relations de table dans un nouveau projet.

Après quelques recherches sur Google, j'ai eu 2 tables configurées en tant qu'InnoDB:

Les clés que je veux lier sont

-> utilisateurs-> ID utilisateur (principal) -> sessions-> ID utilisateur (index)

La seule chose que je ne comprends pas dans ce processus est ce que font les différents paramètres pour "Lors de la mise à jour" et "Lors de la suppression"

Les options ici sont:

  • -- (rien?)
  • Cascade (???)
  • Set Null (met tout à null?)
  • Aucune action (enfin duh ...)
  • Restreindre (???)

Je veux essentiellement que les données des sessions soient supprimées lorsqu'un utilisateur est complètement supprimé. Cela car les sessions ne seront supprimées que lorsque l'expiration est détectée par mon gestionnaire de sessions ...

Donc, si quelqu'un peut me dire ce que font ces options, ce serait très apprécié.

47
HTDutchy

CASCADE propage la modification 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.)

SET NULL définit la valeur de la colonne sur NULL lorsqu'une ligne parent disparaît.

RESTRICT entraîne l'échec de la tentative de SUPPRESSION d'une ligne parent.

EDIT: Vous n'avez pas posé de questions à leur sujet, mais le standard SQL définit deux autres actions: SET DEFAULT et NO ACTION. Dans MySQL, NO ACTION est équivalent à RESTRICT. (Dans certains SGBD, NO ACTION est une vérification différée, mais dans MySQL, toutes les vérifications sont immédiates.) L'analyseur MySQL accepte SET DEFAULT, mais les moteurs InnoDB et NDB rejettent ces instructions, donc SET DEFAULT ne peut pas être utilisé pour un ON UPDATE ou ON DELETE contrainte.

Notez également que les actions de clé étrangère en cascade n'activent pas les déclencheurs dans MySQL.

119
Ted Hopp

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 un ligne parent si un 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 mise à jour.

17
Jay Patel