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:
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é.
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.
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.