Contraintes de clé étrangère MySQL : suppression d'enregistrements orphelins
Les bases de données maintiennent souvent des relations entre les tables via des contraintes de clé étrangère. Ces contraintes garantissent l'intégrité des données en empêchant les enregistrements orphelins, c'est-à-dire les enregistrements faisant référence à des données inexistantes dans d'autres tables. Dans ce contexte, nous explorons comment implémenter des suppressions en cascade sur les clés étrangères dans MySQL.
Exemple de scénario
Considérez les tableaux suivants :
La tablecategories_products crée de nombreux -à-plusieurs relations entre les deux autres tables. Supposons maintenant que nous souhaitions supprimer une catégorie. Comment pouvons-nous nous assurer que les produits correspondants ne sont pas supprimés s'ils sont également associés à d'autres catégories ?
Mise en œuvre des suppressions en cascade
Pour obtenir le comportement souhaité, nous devons mettre en place des contraintes de clé étrangère avec la clause ON DELETE CASCADE. Lors de la définition de la colonne Foreign_key_id dans la table enfant (categories_products), nous pouvons spécifier cette clause comme suit :
FOREIGN KEY (category_id) REFERENCES categories (id) ON DELETE CASCADE
Cette clause garantit que si une catégorie est supprimée, tous les enregistrements correspondants dans la tablecategories_products seront également supprimé. Cependant, la cascade ne se propagera pas à la table products car aucune contrainte de clé étrangère n'y est définie.
Exemple de démonstration
En supposant que nous ayons ce qui suit données :
catégories :
produits :
categories_products:
Si nous supprimons la catégorie « rouge », les actions suivantes seront se produisent :
De cette façon, la suppression en cascade garantit l'intégrité des données en supprimant uniquement les enregistrements associés pertinents, en évitant les enregistrements orphelins et en maintenant les relations entre les tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!