SQL删除多表关联数据的三种方法
1.级联删除
sql server版:
create table a
( id varchar(20) primary key, password varchar(20) not null ) create table b ( id int identity(1,1) primary key, name varchar(50) not null, userId varchar(20), foreign key (userId) references a(id) on delete cascade )
mysql版本:
create table a( id varchar(20) primary key, password varchar(20) not null); create table b( id int primary key auto_increment, name varchar(50) not null, userId varchar(20), foreign key(userId) references a(id) ON DELETE CASCADE ON UPDATE CASCADE);
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
sql server版:
insert a values ('11','aaa'); insert a values('23','aaa'); insert b values('da','11'); insert b values('das','11'); insert b values('ww','23');
mysql版本:
insert a values ('11','aaa'); insert a values('23','aaa'); insert into b(name,userId) values('da','11'); insert into b(name,userId) values('das','11'); insert into b(name,userId) values('ww','23');
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了
delete a where id='11'
2.采用存储过程
A表:
AID Aname 主健:AID
B表:
BID BelongAID Bname 主健:BID,外健:BelongAID
C表:
CID BelongBID Cname 主健:CID,外健:BelongBID
D表:
DID BelongCID Dname 主健:DID,外健:BelongCID
其中:
A表和B表通过A.AID和B.BelongAID 创建了外健关系
B表和C表通过B.BID和C.BelongBID 创建了外健关系
C表和D表通过C.CID和D.BelongCID 创建了外健关系
3.采用触发器