2011-02-14 51 views
0

我有以下兩個表:上的刪除限制SQL幫助

Owner: 

    O_ID P_ID 
    Bob Sam 
    Steve Rex 


    Pets 

    P_ID O_ID 
    Sam Bob 
    Rex Steve 

所有者的第二列(P_ID)是一個外鍵寵物的第一列(P_ID)。

在DB2中,我試圖添加一個ON_DELETE RESTRICT約束,這樣如果有人嘗試刪除所有者表中的所有者,如果該所有者是寵物的所有者,則刪除操作將被拒絕。我知道我必須使用ON_DELETE RESTRICT命令,但我不知道如何去做。

我已經試過這樣:

ALTER TABLE OWNERS 
ADD CONSTRAINT no_delete 
FOREIGN KEY (P_ID) 
REFERENCES PETS(P_ID) 
ON DELETE RESTRICT 

無濟於事。

回答

4

您的語法無誤。你的邏輯錯了。

您想防止刪除擁有寵物的寵物。要做到這一點,你需要改變表「寵物」,並添加一個引用表「所有者」的外鍵約束。

+0

我已經有這樣的約束 - 至少我很確定我是這樣做的。 – Waffles 2011-02-14 03:03:53

3

噓聲是正確的,這裏是正確的ALTER TABLE命令(在DB2 LUW V9.7測試):

ALTER TABLE寵物添加約束 NO_DELETE外鍵(P_ID) 參考所有者(P_ID)ON DELETE RESTRICT;

然後,當我試圖從所有者表具有以下命令刪除史蒂夫:

DELETE FROM所有者其中O_ID = '史蒂夫';

我收到的,符合市場預期:

DB21034E該命令被處理爲 的SQL語句,因爲它不是一個 有效的命令行處理器命令。 在SQL處理期間,它返回: SQL0532N由於關係 「DB2INST1.PETS.NO_DELETE」限制 的刪除,所以刪除的父行不能爲 。 SQLSTATE = 23001

然後,以確保這是預期的完全工作,我抹去史蒂夫的狗:

DELETE FROM寵物WHERE O_ID = '史蒂夫'

並重新運行試圖從主人桌上刪除史蒂夫,它的工作!