web-dev-qa-db-fra.com

RESTRICT MySQL et PAS D'ACTION

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?

52
Erebus

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, donc NO ACTION est identique à RESTRICT.

44
Anthony Accioly

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.

16
Nanne

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.

16
Wolph