首页 > 代码库 > 级联删除

级联删除

级联删除练习

--创建用户表(主表)
create table UserInfo
(
UserId int identity(1,1) primary key ,
UserName varchar(20),  --用户名
password varchar(20) not null --密码
)
--创建用户详情表(附表)
create table UserDetails
(
id int identity(1,1) primary key,
name varchar(50) not null, --真实姓名
userId int
--方法一: 创建用于级联删除的约束
--foreign key (userId) references UserInfo(UserId)  on delete cascade
)

--方法二:创建用于级联删除的约束
alter table  UserDetails  --约束对象UserDetails
add constraint [FK_UserDetails_UserInfo]   --添加约束,命名为FK_UserDetails_UserInfo
foreign key(UserId) references UserInfo(UserId) -- UserDetails表的UserId列引用UserInfo表UserId列的值
on delete cascade  --级联删除

--插入测试数据
insert UserInfo values (‘ly‘,‘jeff‘)
insert UserInfo values(‘wzq‘,‘wzqwzq‘)
insert UserInfo values(‘lg‘,‘lglg‘)
 
insert UserDetails values(‘李四‘,1)
insert UserDetails values(‘王五‘,2)
insert UserDetails values(‘刘六‘,3)


--测试级联删除
--删除 UserInfo 主表中UserID=1的同时删除UserDetails从表中UserId=1 的内容 
delete from userInfo where UserId=1

--删除userDetails从表中UserId=1 对主表无影响
delete from userDetails where UserId=1

--删除用于级联删除的约束
ALTER TABLE [dbo].[UserDetails] DROP CONSTRAINT [FK_UserDetails_UserInfo]

 --查询
select *from UserInfo
select *from UserDetails




sqlserver 支持级联删除语法

alter table  外键表名称
add constraint 约束名称
Foreign Key(column[,...n]) 
references referenced_table_name[(ref_column[,...n])]
[on delete cascade]

注释
column:外键表的列名
referenced_table_name:外键参考的主键表名称
ref_name:外键要参考的表的主键列
on delete:删除级联

  

级联删除