Maison > base de données > tutoriel mysql > Comment éviter les enregistrements orphelins lors de la suppression de données avec des contraintes de clé étrangère MySQL ?

Comment éviter les enregistrements orphelins lors de la suppression de données avec des contraintes de clé étrangère MySQL ?

Susan Sarandon
Libérer: 2024-12-29 11:55:10
original
425 Les gens l'ont consulté

How to Prevent Orphaned Records When Deleting Data with MySQL Foreign Key Constraints?

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 :

  • catégories :ID, name
  • products:ID, name
  • categories_products:category_id, product_id

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
Copier après la connexion

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 :

    • rouge, vert, bleu, blanc, noir
  • produits :

    • bottes, mitaines, chapeaux, manteaux
  • categories_products:

    • bottes rouges, mitaines vertes, manteaux rouges, chapeaux noirs

Si nous supprimons la catégorie « rouge », les actions suivantes seront se produisent :

  • L'entrée de catégorie « rouge » est supprimée de la table des catégories.
  • Les entrées « bottes rouges » et « manteaux rouges » sont supprimées de la table catégories_produits.
  • Les catégories 'bottes' et 'manteaux' restent inchangées dans le tableau des catégories.
  • Les catégories 'bottes' et Les « mitaines » ne sont pas affectées dans la table des produits.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal