爱玺玺

爱玺玺的生活日记本。wx:lb87626

sqlserver级联删除

主键和外键的关系就是引用的关系,不要和关联查询搞混淆了。关联是抛出条件返回。


主键和外键是谁引用谁的关系


如果没有设置级联删除,a表被b表引用,如果b没有取消引用a就不能删除被引用的记录。


如果设置了级联删除或其他什么操作。

如果a表的记录被删除,那么引用它的表的记录也将被删除。


深刻理解主键和外键

主键重点就是主,只要我被删除或改动引用我的都会被改动或删除。

引用的我的表受我的影响,但是我不受引用我的表的影响。

外键就是,自己还受另一个表的键控制。这个外键就是引用的另一个表的主键。

外键就是外部的接口,还受外部表的操作。


主要理解就是谁引用了谁,谁就会被谁控制。


比如外键引用的那个表对应的记录删除,那么对应这个表外键的记录也能被删除。


sqlserver设置外键的方法.


删除多表关联数据的三种方法

1、级联删除

1
2
3
4
5
create table a
(
id  varchar(20) primary key,
password varchar(20) not null
)
1
2
3
4
5
6
7
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
)


表B创建了外码userId 对应A的主码ID,声明了级联删除

测试数据:

1
2
3
4
5
insert values ('11','aaa')
insert values('23','aaa')
insert values('da','11')
insert values('das','11')
insert values('ww','23')


删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了

1
delete 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、采用触发器

删除Class表中的一条记录的同时删除该记录Class_No字段值在Student表中对应的记录。

1
2
3
4
5
6
7
8
Create Trigger Class_delete
on Class
for delete
as
begin
delete from Student
where Class_No=(select Class_No from deleted)
end


发表评论:

Powered By Z-BlogPHP 1.4 Deeplue Build 150101

Copyright Your WebSite.Some Rights Reserved.

蜀ICP备11021721号-5