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

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
Oracle——級聯(lián)刪除(選摘)

轉(zhuǎn)載:Oracle——級聯(lián)刪除(選摘)

(2008-01-14 09:50:56)
 

創(chuàng)建數(shù)據(jù)庫時為了防止其他人不小心刪除操作錯誤,所有的外鍵都沒有加級聯(lián)刪除。哪知,不知什么時候自己入了一批錯誤的數(shù)據(jù)進(jìn)去,入庫使用的是軟件自動的,一下點(diǎn)錯給自己帶來無盡麻煩啊,刪除就不好辦了。表間的關(guān)系比較復(fù)雜,數(shù)據(jù)量又比較多,一個個刪絕對會出大問題。于是實驗了幾種解決的辦法,現(xiàn)小結(jié)一下。

方法一:創(chuàng)建約束時設(shè)定級聯(lián)刪除

(但一般由于各種原因或出于各種考慮在創(chuàng)建數(shù)據(jù)庫時沒有設(shè)定級聯(lián)刪除)

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)


方法二:創(chuàng)建約束時沒有使用級聯(lián)刪除,在需要使用級聯(lián)刪除時,刪除原來的外鍵約束,重建帶級聯(lián)刪除的約束

(實驗證明完全可行,注意需要對已經(jīng)存在的數(shù)據(jù)進(jìn)行驗證,否則新建的約束對原有數(shù)據(jù)不具備效率,默認(rèn)是驗證的,若強(qiáng)制要求不驗證,使用NOVALIDATE關(guān)鍵詞。還有外鍵引用的只能是唯一主鍵)

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)

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


方法三:使用觸發(fā)器(創(chuàng)建時沒有級聯(lián)刪除)

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

(1)       創(chuàng)建表及插入數(shù)據(jù)

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


結(jié)果:
(2)創(chuàng)建觸發(fā)器:

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;

(3)       刪除及結(jié)果:

SQL:

DELETE FROM "FG123"."ORDERCOMBINE"

WHERE FormerId =’1'

 

方法四:若表間關(guān)系簡單(就兩張表),涉及到的記錄也很少(總共就幾行記錄),直接刪除子表中的相關(guān)記錄,再刪除父表中的記錄即可。

(前面的方法在涉及數(shù)據(jù)量較大以及表間關(guān)系比較復(fù)雜時才有效率上的優(yōu)勢,簡單的直接刪除來的更快)

如上例中,直接刪除

SQL語句:

DELETE FROM "FG123"."ORDERCOMBINE"

WHERE VIPForm =’1';

   

DELETE FROM "FG123"."ORDERCOMBINE"

WHERE FormerId =’1';
 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Access、MSSQL、MYSQL數(shù)據(jù)庫之間有什么區(qū)別
SQL語句---創(chuàng)建表(約束的用法)
Oracle 數(shù)據(jù)庫中的五類完整性約束
oracle新手入門指導(dǎo)之五—ORACLE約束[天源迪科論壇]
oracle中關(guān)于表的所有操作(創(chuàng)建刪除表,修改表結(jié)構(gòu),創(chuàng)建約束,操作表數(shù)據(jù),增刪改查等)
尚學(xué)堂馬士兵Oracle教程 筆記
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服