SQL Server 2000平安設置裝備擺設詳解。本站提示廣大學習愛好者:(SQL Server 2000平安設置裝備擺設詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server 2000平安設置裝備擺設詳解正文
表間的關系比擬龐雜,數據量又比擬多,一個個刪相對會出年夜成績。因而試驗了幾種處理的方法,現小結一下。
辦法一:創立束縛時設定級聯刪除
(但普通因為各類緣由或出於各類斟酌在創立數據庫時沒有設定級聯刪除)
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)
辦法二:創立束縛時沒有應用級聯刪除,在須要應用級聯刪除時,刪除本來的外鍵束縛,重建帶級聯刪除的束縛
(試驗證實完整可行,留意須要對曾經存在的數據停止驗證,不然新建的束縛對原稀有據不具有效力,默許是驗證的,若強迫請求不驗證,應用NOVALIDATE症結詞。還有外鍵援用的只能是獨一主鍵)
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;
(3)刪除及成果:
SQL:
DELETE FROM "FG123"."ORDERCOMBINE"
WHERE FormerId ='1'
辦法四:若表間關系簡略(就兩張表),觸及到的記載也很少(總共就幾行記載),直接刪除子表中的相干記載,再刪除父表中的記載便可。
(後面的辦法在觸及數據量較年夜和表間關系比擬龐雜時才有用率上的優勢,簡略的直接刪除來的更快)
如上例中,直接刪除
SQL語句:
DELETE FROM "FG123"."ORDERCOMBINE"
WHERE VIPForm ='1';
DELETE FROM "FG123"."ORDERCOMBINE"
WHERE FormerId ='1'