Maison > base de données > tutoriel mysql > Comment ON DELETE CASCADE affecte-t-il les tables associées dans les contraintes de clé étrangère MySQL ?

Comment ON DELETE CASCADE affecte-t-il les tables associées dans les contraintes de clé étrangère MySQL ?

Susan Sarandon
Libérer: 2024-12-15 05:43:08
original
541 Les gens l'ont consulté

How Does ON DELETE CASCADE Affect Related Tables in MySQL Foreign Key Constraints?

Contraintes de clé étrangère MySQL avec suppression en cascade

Les contraintes de clé étrangère jouent un rôle essentiel dans le maintien de l'intégrité des données et la prévention des orphelins dans les bases de données relationnelles. Dans MySQL, vous pouvez utiliser l'option ON DELETE CASCADE pour garantir que lorsque vous supprimez un enregistrement parent, les enregistrements enfants associés sont également automatiquement supprimés.

Pour configurer une contrainte de clé étrangère avec suppression en cascade, considérez ce qui suit tables :

CREATE TABLE categories (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE products (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255) DEFAULT NULL,
    category_id INT NOT NULL
) ENGINE=InnoDB;

CREATE TABLE categories_products (
    category_id INT NOT NULL,
    product_id INT NOT NULL,
    PRIMARY KEY (category_id, product_id)
) ENGINE=InnoDB;

ALTER TABLE products
ADD FOREIGN KEY (category_id) REFERENCES categories (id)
ON DELETE CASCADE;
Copier après la connexion

Dans cette configuration, les produits ont une clé étrangère faisant référence aux catégories, et ON DELETE CASCADE est spécifié pour supprimer automatiquement les produits lorsque la catégorie référencée est supprimée. Cependant, cette cascade n'affectera que les enregistrements danscategors_products où lecategory_id correspond à la catégorie supprimée.

Par exemple, si vous disposez des données suivantes :

categories:
+----+------+
| id | name |
+----+------+
| 1  | red  |
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 1  | mittens | 1           |
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 1          | 1           |
| 1          | 2           |
| 2          | 3           |
+------------+-------------+
Copier après la connexion

Si vous supprimez le 'rouge' category:

DELETE FROM categories WHERE (id = 1);
Copier après la connexion

La table products ne sera pas affectée car la cascade ne s'applique qu'à la tablecategories_products. En conséquence, les données deviendront :

categories:
+----+------+
| id | name |
+----+------+
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 2          | 3           |
+------------+-------------+
Copier après la connexion

Cet arrangement garantit que vous pouvez maintenir l'intégrité référentielle tout en évitant la suppression involontaire d'enregistrements non liés.

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