66 votes

MySQL RESTRICT et NO ACTION

Quelle est la différence dans un FK MySQL entre RESTRICT y NO ACTION ? D'après le document, ils semblent être exactement les mêmes. Est-ce le cas ? Si oui, pourquoi avoir les deux ?

59voto

Anthony Accioly Points 10501

Extrait 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 différé contrôles, et NO ACTION est un différé différée. Dans MySQL, les contraintes des clés étrangères sont vérifiées immédiatement, donc NO ACTION est la même chose que RESTRICT .

21voto

Nanne Points 35880

Il doit être conforme à la syntaxe SQL standard. Comme le manuel dit : (c'est moi qui souligne)

PAS D'ACTION : Un mot-clé du SQL standard . Dans MySQL, équivalent à RESTRICT. Le serveur MySQL rejette l'opération de suppression ou de mise à jour de la table parente s'il existe une valeur de clé étrangère liée dans la table référencée. Certains systèmes de base de données ont des contrôles différés, et AUCUNE ACTION n'est un contrôle différé. Dans MySQL, les contraintes de clé étrangère sont vérifiées immédiatement, donc NO ACTION est identique à RESTRICT.

18voto

Wolph Points 28062

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 y RESTRICT c'est que selon la norme, NO ACTION est différée tandis que RESTRICT agit immédiatement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X