日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Oracle中如何用非默認(rèn)方式創(chuàng)建外鍵

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

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括精河網(wǎng)站建設(shè)、精河網(wǎng)站制作、精河網(wǎng)頁制作以及精河網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,精河網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到精河省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

例如下面這兩個(gè)表中分別存的時(shí)員工的基本信息和公司的部門信息。我們?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)在分別使用這兩個(gè)關(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,’財(cái)務(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)在我要?jiǎng)h除銷售部,會(huì)有什么后果呢?

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,顧名思義了,這種方式建立的外鍵約束,當(dāng)被參照的數(shù)據(jù)被刪除是,參照該數(shù)據(jù)的那些數(shù)據(jù)的對應(yīng)值將會(huì)變?yōu)榭罩?,下面我們還是通過試驗(yàn)來證明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;

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

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

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

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

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

【編輯推薦】

  1. Oracle存儲過程開發(fā)實(shí)例
  2. 如何用Oracle實(shí)現(xiàn)組織結(jié)構(gòu)中的匯總統(tǒng)計(jì)
  3. Oracle數(shù)據(jù)庫中違反***約束的處理

網(wǎng)站欄目:詳解Oracle中如何用非默認(rèn)方式創(chuàng)建外鍵
分享路徑:http://m.5511xx.com/article/dhcgpgg.html