J'essaie d'analyser MySQL docs . Ils pourraient être plus clairs. Ce qu'ils semblent dire, c'est qu'il y a cinq possibilités: SET NULL, NO ACTION, RESTRICT, CASCADE et SET DEFAULT.
NO ACTION et RESTRICT font la même chose (empêchent tout changement de base de données qui casse un FK) et cette chose est la valeur par défaut, donc si vous omettez une clause ON DELETE, vous dites NO ACTION (ou RESTRICT - même chose).
SET NULL permet une suppression de ligne parent, définit le FK sur NULL.
CASCADE supprime la ligne enfant.
SET DEFAULT ne doit jamais être utilisé.
Est-ce plus ou moins correct?
Oui c'est correct:
NO ACTION: [...] InnoDB rejette l'opération de suppression ou de mise à jour pour la table parent.
RESTREINDRE : 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. [...]
Apparemment NO ACTION
et RESTRICT
sont synonymes. De plus, puisqu'ils sont utilisés chaque fois qu'il n'y a pas de ON DELETE / UPDATE
, c'est le comportement par défaut.
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. [...]
La colonne étrangère est définie sur NULL, à condition qu'elle ne soit pas déclarée comme NULL (ou InnoDB n'autorisera pas la suppression ou la mise à jour).
CASCADE : Supprimer ou mettre à jour la ligne de la table parent et supprimer ou mettre à jour automatiquement les lignes correspondantes dans la table enfant. [...]
La cascade supprime (ou met à jour) la colonne étrangère.
SET DEFAULT: Cette action est reconnue par l'analyseur, mais InnoDB rejette les définitions de table contenant les clauses ON DELETE SET DEFAULT ou ON UPDATE SET DEFAULT.
Donc, fondamentalement, vous ne pouvez pas utiliser cette option.