創建外鍵約束時如果使用Oracle默認的創建方式,在刪除被參照的數據時,將無法被刪除,這一點在Oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascade和 on delete set null關鍵字來決定刪除被參照數據時是否要將參照這個數據的那些數據一并刪除,還是將那些參照這條數據的數據的對應值賦空。
例如下面這兩個表中分別存的時員工的基本信息和公司的部門信息。我們為
create table dept
(deptno number(10) not null,
deptname varchar2(30) not null,
constraint pk_dept primary key(deptno));
和
create table emp
( empno number(10) not null,
fname varchar2(20) ,
lname varchar2(20) ,
dept number(10) ,
constraint pk_emp primary key(empno));
然后我們現在分別使用這兩個關鍵字來增加外鍵試一下,首先我們來試一下on deletbe cascade
alter table emp
add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;
先增加外鍵。然后插入數據。
insert into dept values(1,’銷售部’);
insert into dept values(2,’財務部’);
insert into emp values (2,’Mary’,'Song’,1);
insert into emp values (3,’Linda’,'Liu’,2);
insert into emp values (4,’Linlin’,'Zhang’,1);
然后現在我要刪除銷售部,會有什么后果呢?
delete from dept where deptno = 1;
我們發現除了dept中的一條數據被刪除了,emp中兩條數據也被刪除了,其中emp中的兩條數據是參照了銷售部的這條數據的,這就很容易理解on delete cascade了。
創建外鍵約束時如果使用Oracle默認的創建方式,在刪除被參照的數據時,將無法被刪除,這一點在Oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascade和 on delete set null關鍵字來決定刪除被參照數據時是否要將參照這個數據的那些數據一并刪除,還是將那些參照這條數據的數據的對應值賦空。
按照上文中介紹的就能夠實現在oracle數據庫中用非默認方式創建外鍵的目的,希望對大家能夠有所幫助。