數據庫中刪除主鍵的值外鍵的三種處理方式(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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM