cascade 介紹與用法 ( oracle)

2022-03-14 00:07:39 字數 4270 閱讀 6402

級聯刪除,比如你刪除某個表的時候後面加這個關鍵字,會在刪除這個表的同時刪除和該錶有關係的其他物件

1.級聯刪除表中的資訊,當表a中的字段引用了表b中的字段時,一旦刪除b中該字段的資訊,表a的資訊也自動刪除。(當父表的資訊刪除,子表的資訊也自動刪除)

例如下面這兩個表中分別存的時員工的基本資訊和公司的部門資訊。我們為

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 delete 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了。

接下來我們再來看on delete set null,顧名思義了,這種方式建立的外來鍵約束,當被參照的資料被刪除是,參照該資料的那些資料的對應值將會變為空值,下面我們還是通過試驗來證明on delete set null作用:

首先恢復剛才的那幾條資料,然後更改約束:

alter table emp

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

然後我們在執行刪除操作:

delete from dept where deptno = 1;

你也會發現除了dept中的銷售部被刪除以外,emp中參照這條資料的兩條資料的dept的值被自動賦空了,這就是on delete set null的作用了。

使用on delete set null有一點需要注意的是,被參參照其他表的那一列必須能夠被賦空,不能有not null約束,對於上面的例子來說是emp中dept列一定不能有not null約束,如果已經定義了not null約束,又使用了on delete set null來刪除被參照的資料時,將會發生:ora-01407: 無法更新 (」dd」.」emp」.」dept」) 為 null的錯誤。

總的來講on delete cascade和on delete set null的作用是用來處理級聯刪除問題的,如果你需要刪除的資料被其他資料所參照,那麼你應該決定到底希望oracle怎麼處理那些參照這些即將要刪除資料的資料的,你可以有三種方式:

禁止刪除,這也是oracle預設的

將那些參照本值的資料的對應列賦空,這個需要使用on delete set null關鍵字

將那些參照本值的資料一併刪除,這個需要使用on delete cascade關鍵字

2。oracle 刪除使用者時報「必須指定 cascade 以刪除 'se'」

這說明你要刪除的oracle 使用者"se" 下面還有資料庫物件,如 table, view 等,這樣你刪除使用者時必須加選項 cascade: drop user se cascade; 表示刪除使用者se,同時刪除 se 使用者下的所有資料物件。還有乙個辦法就是先刪除 se 下的所有資料物件,使 se 變成乙個啥也沒有的空使用者,再 drop user se;3.oracle中drop table cascade constraints之後果當你要drop乙個table時,如果刪除table的動作會造成trigger或constraint產生矛盾,系統會出現錯誤警告的訊息而不會允許執行.。乙個極簡單的例子,例如你有乙個員工基本資料表,上面可能有員工編號和員工姓名等字段,另外有乙個員工銷售表,上面有員工編號和員工銷售額兩個字段,員工薪資表的員工編號欄位為乙個foreign key參照到員工基本資料表的員工編號:

sql> drop table t;

table dropped.

sql> drop table t1;

table dropped.

sql> create table t (id number,name varchar2(20));

table created.

sql> create table t1 (id number,sal number);

table created.

sql> alter table t add constraint t_pk primary key (id);

table altered.

sql> alter table t1 add constraint t_fk foreign key (id) references t (id);

table altered.

sql> insert into t values (1,#39;jack');

1 row created.

sql> insert into t values (2,#39;mary');

1 row created.

sql> commit;

commit complete.

sql> insert into t1 values (1,1000);

1 row created.

sql> insert into t1 values (2,1500);

1 row created.

sql> commit;

sql> insert into t1 values (3,200);

insert into t1 values (3,200)

*error at line 1:

ora-02291: integrity constraint (sys.t_fk) violated - parent key not found

(違反了constraint,員工基本資料表根本沒有3號這個員工,何來的銷售紀錄。)

sql> drop table t;

drop table t

*error at line 1:

ora-02449: unique/primary keys in table referenced by foreign keys

(違反了constraint,員工銷售表t1有參照到table t,這個reference relation不允許你drop table t)

sql> drop table t cascade constraints;

table dropped.

sql> select * from t1;

id sal

---------- ----------

1 1000

2 1500

sql> select constraint_name,table_name from dba_constraints where wner = #39;sys' and table_name = 't1'

no rows selected

sql>

我們可以發現利用drop table cascade constraints可以以刪除關聯table t的constraint來達成你drop table t的目的,原來屬於t1的foreign key constraint已經跟隨著被刪除掉了,但是,儲存在table t1的資料可不會被刪除,也就是說drop table cascade constraints 是不影響到儲存於objec裡的rowdata。

List用法與介紹

泛型的好處 它為使用c 語言編寫物件導向程式增加了極大的效力和靈活性。不會強行對值型別進行裝箱和拆箱,或對引用型別進行向下強制型別轉換,所以效能得到提高。效能注意事項 在決定使用ilist還是使用arraylist類 兩者具有類似的功能 時,記住ilist類在大多數情況下執行得更好並且是型別安全的。...

NSURLSession的介紹與基本用法

對比 nsurlconnection中的存在很多問題,例如 nsurlconnection是ios2.0推出的古老而又經典的網路解決方案。複雜的網路請求需要使用 進行實現。方式預設在主線程工作。只提供了start cancel方法,不能暫停。在使用多執行緒時需要使用執行迴圈。nsurlsession...

htaccess的基本用法與介紹

自定義錯誤頁 htaccess的乙個應用是自定義錯誤頁面,這將使你可以擁有自己的 個性化的錯誤頁面 例如找不到檔案時 而不是你的服務商提供的錯誤頁或沒有任何頁面。這會讓你的 在出錯的時候看上去更專業。你還可以利用指令碼程式在發生錯誤的時候通知你 例如當找不到頁面的時候自動email給你 你所知道的任...