程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server 2000平安設置裝備擺設詳解

SQL Server 2000平安設置裝備擺設詳解

編輯:MSSQL

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'
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved