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.02405.com | 20200001 |
3 | http://www.02405.com | 20200002 |
执行删除语句:
delete a where id='20200001'
表a:
id | password |
20200002 | 654321 |
表b:
id | name | pid |
3 | http://www.02405.com | 20200002 |
当我们删除表a内id为‘20200001’的数据,发现表b内pid 为“20200001”的两条数据也被数据库自动删除了,这就是级联删除