国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Oracle中用非默認方式創(chuàng)建外鍵 - 數(shù)據(jù)庫應(yīng)用 - 編程開發(fā) - 伊甸網(wǎng)

創(chuàng)建外鍵約束時如果使用Oracle默認的創(chuàng)建方式,在刪除被參照的數(shù)據(jù)時,將無法被刪除,這一點在Oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascade和 on delete set null關(guān)鍵字來決定刪除被參照數(shù)據(jù)時是否要將參照這個數(shù)據(jù)的那些數(shù)據(jù)一并刪除,還是將那些參照這條數(shù)據(jù)的數(shù)據(jù)的對應(yīng)值賦空。

  例如下面這兩個表中分別存的時員工的基本信息和公司的部門信息。我們?yōu)?/p>


  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));

  然后我們現(xiàn)在分別使用這兩個關(guān)鍵字來增加外鍵試一下,首先我們來試一下on delete cascade


  alter table emp
  add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;

  先增加外鍵。然后插入數(shù)據(jù)。


  insert into dept values(1,’銷售部’);
  insert into dept values(2,’財務(wù)部’);
  insert into emp values (2,’Mary’,'Song’,1);
  insert into emp values (3,’Linda’,'Liu’,2);
  insert into emp values (4,’Linlin’,'Zhang’,1);

  然后現(xiàn)在我要刪除銷售部,會有什么后果呢?


  delete from dept where deptno = 1;

  我們發(fā)現(xiàn)除了dept中的一條數(shù)據(jù)被刪除了,emp中兩條數(shù)據(jù)也被刪除了,其中emp中的兩條數(shù)據(jù)是參照了銷售部的這條數(shù)據(jù)的,這就很容易理解on delete cascade了。

  接下來我們再來看on delete set null,顧名思義了,這種方式建立的外鍵約束,當被參照的數(shù)據(jù)被刪除是,參照該數(shù)據(jù)的那些數(shù)據(jù)的對應(yīng)值將會變?yōu)榭罩担旅嫖覀冞€是通過試驗來證明on delete set null作用:

  首先恢復(fù)剛才的那幾條數(shù)據(jù),然后更改約束:


  alter table emp
  add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;

  然后我們在執(zhí)行刪除操作:


  delete from dept where deptno = 1;

  你也會發(fā)現(xiàn)除了dept中的銷售部被刪除以外,emp中參照這條數(shù)據(jù)的兩條數(shù)據(jù)的dept的值被自動賦空了,這就是on delete set null的作用了。

  使用on delete set null有一點需要注意的是,被參參照其他表的那一列必須能夠被賦空,不能有not null約束,對于上面的例子來說是emp中dept列一定不能有not null約束,如果已經(jīng)定義了not null約束,又使用了on delete set null來刪除被參照的數(shù)據(jù)時,將會發(fā)生:ORA-01407: 無法更新 (”DD”.”EMP”.”DEPT”) 為 NULL的錯誤。

  總的來講on delete cascade和on delete set null的作用是用來處理級聯(lián)刪除問題的,如果你需要刪除的數(shù)據(jù)被其他數(shù)據(jù)所參照,那么你應(yīng)該決定到底希望oracle怎么處理那些參照這些即將要刪除數(shù)據(jù)的數(shù)據(jù)的,你可以有三種方式:

  禁止刪除。這也是Oracle默認的

  將那些參照本值的數(shù)據(jù)的對應(yīng)列賦空,這個需要使用on delete set null關(guān)鍵字

  將那些參照本值的數(shù)據(jù)一并刪除,這個需要使用on delete cascade關(guān)鍵字

本文地址:【伊甸網(wǎng)】http://www.edenw.com/tech/devdeloper/database/2010-07-18/4787.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
oracle新手入門指導(dǎo)之五—ORACLE約束[天源迪科論壇]
oracle中關(guān)于表的所有操作(創(chuàng)建刪除表,修改表結(jié)構(gòu),創(chuàng)建約束,操作表數(shù)據(jù),增刪改查等)
尚學堂馬士兵Oracle教程 筆記
Oracle 常見的五種約束
oracle視圖總結(jié)(轉(zhuǎn))
Oracle約束(Constraint)詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服