栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL外键约束,级联删除

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL外键约束,级联删除

如果您的级联删除某个产品是因为该产品属于被杀类别的成员,那么它会删除该产品,那么您的外键设置不正确。给定示例表,您应该具有以下表设置:

CREATE TABLE categories (    id int unsigned not null primary key,    name VARCHAr(255) default null)Engine=InnoDB;CREATE TABLE products (    id int unsigned not null primary key,    name VARCHAr(255) default null)Engine=InnoDB;CREATE TABLE categories_products (    category_id int unsigned not null,    product_id int unsigned not null,    PRIMARY KEY (category_id, product_id),    KEY pkey (product_id),    FOREIGN KEY (category_id) REFERENCES categories (id)       ON DELETe CASCADE       ON UPDATE CASCADE,    FOREIGN KEY (product_id) REFERENCES products (id)       ON DELETE CASCADE       ON UPDATE CASCADE)Engine=InnoDB;

这样,您可以删除产品或类别,只有category_products中的关联记录会一起消失。级联将不会沿着树走得更远,并删除父产品/类别表。

例如

products: boots, mittens, hats, coatscategories: red, green, blue, white, blackprod/cats: red boots, green mittens, red coats, black hats

如果删除“红色”类别,则类别表中的“红色”条目以及两个条目prod / cats:“红色靴子”和“红色外套”都会消失。

删除操作不会进一步进行,也不会删除“靴子”和“外套”类别。

评论跟进:

您仍然误解了级联删除的工作方式。它们仅影响定义了“删除时级联”的表。在这种情况下,级联设置在“
categories_products”表中。如果您删除“红色”类别,则将在category_products中级联删除的唯一记录是那些

category_id= red
。它不会触及“ category_id = blue”的任何记录,也不会继续传递到“产品”表,因为该表中没有定义外键。

这是一个更具体的示例:

categories:     products:+----+------+   +----+---------+| id | name |   | id | name    |+----+------+   +----+---------+| 1  | red  |   | 1  | mittens || 2  | blue |   | 2  | boots   |+---++------+   +----+---------+products_categories:+------------+-------------+| product_id | category_id |+------------+-------------+| 1          | 1| // red mittens| 1          | 2| // blue mittens| 2          | 1| // red boots| 2          | 2| // blue boots+------------+-------------+

假设您删除类别2(蓝色):

DELETE FROM categories WHERe (id = 2);

DBMS将查看所有具有指向“类别”表的外键的表,并删除匹配ID为2的记录。由于我们仅在中定义了外键关系

products_categories
,所以一旦删除完成:

+------------+-------------+| product_id | category_id |+------------+-------------+| 1          | 1| // red mittens| 2          | 1| // red boots+------------+-------------+

products
表中没有定义外键,因此级联将无法在其中工作,因此仍然列出了靴子和连指手套。不再有“蓝色靴子”和“蓝色手套”了。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号