数据库中删除主键的值外键的三种处理方式(1.restrict,2.cascade 3.set null)

外键所指定的字段(列)取值受限制,可以取两种值:

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

  2. 可以取空值。

 

第一种情况 restrict关键字

 

 

例子:创建了2张表

 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中,con列是主键,表student中,sno是主键,cno外键,外键取值如上面说过的右2种

情况1.要在主键中出现过2.该外键取值位null,上述表student外键加了restrict关键字所以当从表class(主键)删除一条数据,刚好表student中有该班级的学生,则会报错,不允许删除

第二种情况 cascade关键字

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

 cascade表示联级删除,当删除主表(主键)即class表的中一条数据,会把表student(依赖表)

里对应的数据一起删掉

第三种情况 set null关键字

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

 

--有关set null的测试
--1.创建2张表
create table class(
cno number(5) primary key,
cname varchar2(20)
);

create table student(
sno number(5) primary key,
sname varchar2(10),
cno number(5),
foreign key(cno) references class(cno) on delete set null
);

--第一张和第二张表插入数据
insert into class ele01 values(1,'高一一班');
insert into class ele01 values(2,'高二二班');
insert into class ele01 values(3,'高三三班');
commit;


insert into student values(1,'大黄01',01);
insert into student values(2,'大黄02',02);
insert into student values(3,'大黄03',03);
commit;

--删除数据
delete from class ele01 where ele01.cno= 2;
commit;


--查看结果
select * from student;

 

posted @ 2019-10-30 11:10  我今天也很帅  阅读(1932)  评论(0编辑  收藏  举报