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;
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 | +------------+-------------+
Si vous supprimez le 'rouge' category:
DELETE FROM categories WHERE (id = 1);
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 | +------------+-------------+
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!