数据库中的restrict cascade 和set null

restrict和cascade都是在外码定义时指定的关键字。

外码所指定的字段取值受限制,可以取两种值:

  1. 所参照主码中出现过的值;

  2. 可以取空值。

外码所指定的字段中数据的增删改是受到外码约束的限制的,在数据增删改时会检查是否满足外码约束条件,当不满足外码的条件时,所做的处理与定义外码时指定的restrict关键字或者cascade关键字有关。

下面以一个具体例子说明:

设有两张表:student和class,表定义语句为:

create table class(cno int primary key, cname varchar(20))

create table student(sno int primary key, sname varchar(10), cno int, foreign key(cno) references class(cno) on delete restrict)

第一张表class中,cno是主码,第二张表student中,sno是主码,cno是外码,外码的取值必须在class的主码cno中出现过,或者取空值。注意,在外码定义时指定了restrict关键字,此时,如果从class表中删除一条数据(即删除一个班级),student表中恰好有该班级的学生,则会报错,不允许删除。

如果在student表的外码定义时指定的是cascade,即

create table student(sno int primary key, sname varchar(10), cno int, foreign key(cno) references class(cno) on delete cascade)

则表示级联删除,删除class表中的一条数据时,会把student表中对应的数据一起删除掉。此外,在外码定义时还可以指定on delete set null,表示删除class表中的一条数据时,如果student表中有对应的数据,则把这些对应的数据的cno设置为空值NULL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值