sql--级联删除

参考:https://www.cnblogs.com/fengyingwang/p/3391106.html

实证:

代码如下:


drop table a; 
create table a
(
id  int primary key auto_increment,
user varchar(20) not null
); 

drop table c; 
create table c
(
id  int primary key auto_increment,
groups varchar(20) not null
); 

drop table b; 
create table b
(
id int  primary key auto_increment,
userid int,
groupid int,
foreign key (userid) references a(id) on delete cascade,
foreign key (groupid) references c(id) on delete cascade
); 
 

insert into a(user) values("sddd");
insert into a(user) values("sddd2");
insert into a(user) values("sddd3");

insert into c(groups) values("dddd");
insert into c(groups) values("dddd2");
insert into c(groups) values("dddd3");

insert into b(userid, groupid) values(1,1);
insert into b(userid, groupid) values(1,2);
insert into b(userid, groupid) values(1,3);
insert into b(userid, groupid) values(2,1);
insert into b(userid, groupid) values(2,2);
insert into b(userid, groupid) values(2,3);

delete from c where id=1;
delete from c where id=1;

结果图:

 

级联删除规则 `ON DELETE CASCADE` 是数据库中用于处理表间关联关系的一种重要机制,主要应用于关系型数据库,如 MySQL、PostgreSQL 等。当在数据库中定义表与表之间的外键约束时,可以使用该规则。 ### 功能概述 `ON DELETE CASCADE` 规则允许在删除父表中的某条记录时,数据库系统会自动删除子表中所有与之关联的记录。这确保了数据的一致性,避免出现孤立的记录,即子表中存在引用父表中已删除记录的情况。 ### 语法示例 在创建表时,可以通过以下方式定义外键约束并使用 `ON DELETE CASCADE` 规则。以 MySQL 为例: ```sql -- 创建父表 CREATE TABLE parent_table ( parent_id INT PRIMARY KEY, -- 其他字段 parent_name VARCHAR(50) ); -- 创建子表,并定义外键约束及级联删除规则 CREATE TABLE child_table ( child_id INT PRIMARY KEY, parent_id INT, -- 其他字段 child_name VARCHAR(50), FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id) ON DELETE CASCADE ); ``` 在上述示例中,`child_table` 通过 `parent_id` 字段引用了 `parent_table` 的 `parent_id` 字段,并且指定了 `ON DELETE CASCADE` 规则。 ### 实际效果 当执行以下删除操作时: ```sql DELETE FROM parent_table WHERE parent_id = 1; ``` 数据库系统会自动删除 `child_table` 中所有 `parent_id` 为 1 的记录,以保持数据的一致性。 ### 优点 - **数据一致性**:自动删除关联记录,避免了数据冗余和不一致的问题。 - **简化操作**:无需手动编写额外的 SQL 语句来删除子表中的关联记录,减少了开发工作量。 ### 缺点 - **数据丢失风险**:如果不小心删除了父表中的重要记录,与之关联的子表记录也会被自动删除,可能导致数据的意外丢失。 - **性能影响**:在删除大量记录时,级联删除可能会导致性能下降,因为数据库需要处理多个表的删除操作。 ### 注意事项 - 在使用 `ON DELETE CASCADE` 规则时,需要谨慎考虑数据的重要性和业务需求,确保不会因为误操作而导致数据丢失。 - 对于复杂的数据库架构,级联删除可能会引发连锁反应,影响多个表的数据,因此需要进行充分的测试和验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值