On Update和On Delete是SQL语言的一个标准,用于数据库外键定义,设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则。

On Update表示主键表中被参考字段的值被更新时,On Delete表示主键表中被参考字段的值被删除时。

语法:


foreign key (foreign_key_id) references table(primary_key_id) on update/delete parameter

其中parameter有no action , set null , set default ,cascade四个选项,分别表示:

1.no action 表示 不做任何操作,

2.set null 表示在外键表中将相应字段设置为null

3.set default 表示设置为默认值

4.cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除。

级联更新时,依据的是之前匹配的数据,在主表更新关联的外键字段的值后,系统自动更新从表的相应外键字段的值,而不是其他未设置为主外键关联的字段,不是主外键关联的字段不受影响。

示例:


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,
 pid varchar(20),
 foreign key (pid) references a(id) on delete cascade
)

表a:

id password
20200001 123456
20200002 654321

表b:

id name pid
1 零五科技 20200001
2 www.codesou.cn 20200001
3 http://www.codesou.cn 20200002

执行删除语句:


delete a where id='20200001'

表a:

id password
20200002 654321

表b:

id name pid
3 http://www.codesou.cn 20200002

当我们删除表a内id为‘20200001’的数据,发现表b内pid 为“20200001”的两条数据也被数据库自动删除了,这就是级联删除