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

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

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

可以取空值。

第一种情况 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;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值