主键和外键的关系就是引用的关系,不要和关联查询搞混淆了。关联是抛出条件返回。
主键和外键是谁引用谁的关系
如果没有设置级联删除,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 a values ( '11' , 'aaa' ) insert a values ( '23' , 'aaa' ) insert b values ( 'da' , '11' ) insert b values ( 'das' , '11' ) insert b values ( 'ww' , '23' ) |
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了
1 | 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、采用触发器
删除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 |