Quelle est la différence dans un FK MySQL entre RESTRICT
et NO ACTION
? D'après le doc, ils semblent exactement les mêmes. Est-ce le cas? Si oui, pourquoi avoir les deux?
De la documentation MySQL: https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
Certains systèmes de base de données ont des vérifications différées et
NO ACTION
est un chèque différé. Dans MySQL, les contraintes de clé étrangère sont vérifiées immédiatement, doncNO ACTION
est identique àRESTRICT
.
C'est pour se conformer à la syntaxe SQL standard. Comme le manuel dit: (le mien est souligné)
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.
Ils sont identiques dans MySQL.
Dans la norme SQL 2003, il existe 5 actions référentielles différentes:
CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT
La différence entre NO ACTION
et RESTRICT
est que selon la norme, NO ACTION
est différé tandis que RESTRICT
agit immédiatement.