Clefs étrangères, ON UPDATE et ON DELETE

ON UPDATE et ON DELETE sont les deux types de règle que l'on attribue aux clefs étrangères.

Ces règles s'appliquent sur les bases de données MySQL utilisant le moteur InnoDB.

Perso, j'ai beau essayer de retenir, à un moment je fini par mélanger, donc voici un petit récapitulatif basé sur ces structures :

  • RESTRICT : Ne permet pas la modification de GROUPE.idgroupe si celui-ci est utilisé dans la table USER
  • CASCADE : Sur modification de GROUPE.idgroupe, les USER.idgroupe sont mis à jour avec la nouvelle valeur.
  • NO ACTION : La modification de GROUPE.idgroupe n’entraîne aucune autre action
  • SET NULL : La modification de GROUPE.idgroupe met la valeur des champs USER.idgroupe rattachés à Null
  • RESTRICT : On ne peut pas supprimer un enregistrement du GROUPE s'il est encore utilisé dans la table USER
  • CASCADE : La suppression d'un enregistrement de la table GROUPE supprime tous les enregistrements rattachés dans la table USER
  • NO ACTION : La suppression d'un enregistrement de la table GROUPE n'a aucun effet sur la table USER
  • SET NULL : La suppression d'un enregistrement de la table GROUPE met à Null les USER.idgroupe rattachés.

Avec MySQL (InnoDB), NO ACTION revient à employer RESTRICT.

Cas généraux

Dans le cas CIF, en règle générale on a : ON DELETE RESTRICT et ON UPDATE RESTRICT.

En effet il est assez rare que l'ID d'un enregistrement change, mais si dans un cas particulier l'ID est amené à changer, on utilisera ON UPDATE CASCADE

Dans ce cas, il n'est pas utile de conserver une liaison si un enregistrement est supprimé dans USER ou GROUPE.

On a alors ON DELETE CASCADE et ON UPDATE CASCADE.

Si ON DELETE et/ou ON UPDATE ne sont pas précisés, la règle appliquée par défaut est RESTRICT.

Saisissez votre commentaire:
Si vous ne pouvez pas lire le code, téléchargez ce fichier .wav pour l'écouter.
 

Si cet article vous a été utile ou simplement si vous appréciez ce site, n'hésitez pas à me soutenir via Paypal ou en utilisant la bannière Amazon1) ci-dessous pour vos futurs achats, ça ne vous coûtera pas plus cher et ça soutiendra un peu ce site ;-)


1)
Ou ajoutez ce lien https://amzn.to/2ZRiKrq vers Amazon dans vos favoris ;-)
  • par fabrice