sql级联删除的方法介绍

发布时间:2019-08-15编辑:脚本学堂
有没有遇到过需要sql 级联删除数据的情况呢?本文介绍sql级联删除数据表的方法,供大家参考。

要求:删除主表时,自动删除副表(外键约束)中的内容。

删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用。
在级联删除中,还删除其外键值引用删除的主键值的所有行。

例如,如下的sql语句

create database temp
go
use temp
go

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
)

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)

备注:
1)、sqlserver 支持级联更新和删除
2)、oracle 只支持级联删除

alter table 表名
add constraint 外键名
foreign key(字段名) references 主表名(字段名)
on delete cascade

语法:
Foreign Key
(column[,...n])
references referenced_table_name[(ref_column[,...n])]
[on delete cascade]
[on update cascade]
注释:
column:列名
referenced_table_name:外键参考的主键表名称
ref_name:外键要参考的表的主键列
on delete:删除级联
on update:更新级联
0
0

此时,Delete From UserInfo Where UserId = 1 可以删除UserInfo表和UserDetails表的UserId=1 的内容。