Oracle 多表級聯刪除方法

2021-08-31 12:13:40 字數 2340 閱讀 5128

建立資料庫時為了防止其他人不小心刪除操作錯誤, 所有的外來鍵都沒有加級聯刪除。哪知,不知什麼時候自己入了一批錯誤的資料進去,入庫使用的是軟體自動的,一下點錯給自己帶來無盡麻煩啊,刪除就不好辦了。 表間的關係比較複雜,資料量又比較多,乙個個刪絕對會出大問題。於是實驗了幾種解決的辦法,現小結一下。

方法一:建立約束時設定級聯刪除

(但一般由於各種原因或出於各種考慮在建立資料庫時沒有設定級聯刪除)

sql語句:

create table "u_wen_book"."fartab" ("far_id" number(10) not null,

"far_name" varchar2(10), "other_name" varchar2(10),

constraint "pk_fer" primary key("far_id"))

create table "u_wen_book"."chiltab" ("chil_id" number(10) not

null, "chil_name" varchar2(10), "chil_other" varchar2(10),

"far_id" number(10) not null,

constraint "pk_chil" primary key("chil_id"),

constraint "fk_chil" foreign key("far_id")

references "u_wen_book"."fartab"("far_id") on delete cascade)

方法二:建立約束時沒有使用級聯刪除,在需要使用級聯刪除時,刪除原來的外來鍵約束,重建帶級聯刪除的約束

sql語句:

alter table "u_wen_book"."gchiltab1"

drop constraint "fk_g1"

alter table "u_wen_book"."gchiltab1"

add (constraint "fk_g1" foreign key()

references "u_wen_book"."chiltab"()

on delete cascade)

(這樣就可以級聯刪除了,刪除完後,如果不放心這樣的約束條件,並且不嫌麻煩可以再重建為不帶級聯刪除等外來鍵約束,防止誤操作)

方法三:使用觸發器(建立時沒有級聯刪除)

(比較靈活,可以根據自己編寫的程式進行,引用的不是唯一主鍵也可以)

(1)       建立表及插入資料

sql語句:

create   table ordercombine   (  

o_id          varchar2(16)     not   null,  

orderid       varchar2(15)     not   null,                        

formerid     varchar2(16)     not   null,  

constraint   pk_ordercombine   primary   key   (formerid) );

create table vipform  (  

v_id         varchar2(16)     not   null,              

isvalid      char(1)   default   '0'     not   null,                  

constraint fk_vipform foreign key(v_id)   references   ordercombine(formerid)

insert into ordercombine values('1','1','1');

insert into ordercombine values('2','2','2');

insert into vipform values('1','5');

insert into vipform values('2','4');

insert into vipform values('1','2');

結果:(2)建立觸發器:

sql:

create or replace trigger "fg123"."ter_ov"

before

delete on "ordercombine" for each row

begin

delete   from   vipform

where   vipform.v_id=:old.formerid;

end;

解析Oracle中多表級聯刪除的方法

表間的關係比較複雜,資料量又比較多,乙個個刪絕對會出大問題。於是實驗了幾種解決的辦法,現小結一下。方法一 建立約束時設定級聯刪除 但一般由於各種原因或出於各種考慮在建立資料庫時沒有設定級聯刪除 sql語句 複製 如下 create table u wen book fartab far id num...

mysql 多表級聯刪除

備忘一下 例如存在3個表,a,b,c.a,b是一對多關係 a id,name a b id,aid,name b b,c是一對多關係 b id,aid,name b c id,bid,name c 實現效果 刪除乙個a的id,與之關聯的b內aid的所有元組都刪除,b刪除就會把c關聯b的bid的所有元...

oracle 級聯刪除

1 查詢外來鍵及父表 select a.constraint name 外鍵名,a.table name 子表,b.table name 父表 from user constraints a,user constraints b where a.constraint type r and b.con...