2010-03-24 95 views
0

我有這樣一個邏輯我想實現作爲觸發器,但我不知道該怎麼做!我想創建一個觸發器,當一行被刪除時,它會檢查其中一列的值是否存在於另一個表中,如果存在,它也應該根據另一列在另一個表上執行刪除操作。循環和條件觸發內部

所以說我們有一個表Foo有列Bar,Baz。這就是ID做,如果我不使用觸發器:

function deleteFromFooTable(FooId) 
{ 
    SELECT (Bar,Baz) FROM FooTable WHERE id=FooId 
    if not-empty(SELECT * FROM BazTable WHERE id=BazId) 
    DELETE FROM BarTable WHERE id=BarId 

    DELETE FROM FooTable WHERE id=FooId 

} 

我跳了一些籃球在僞代碼,但我希望你們都拿到哪裏我去。看起來我需要的是一種在觸發器語句中執行條件和循環(在多行刪除的情況下)的方法。到目前爲止,我還沒有找到任何東西。這是不可能的,還是這種不好的做法?謝謝!

回答

2

如果在這些表之間沒有設置外鍵關係,則需要這樣做。我將向您展示創建表格時設置所需內容的命令。顯然,你只需要更新表格。

CREATE TABLE foo (id INT, bar_id INT, 
    FOREIGN KEY (bar_id) REFERENCES bar(id) 
     ON DELETE CASCADE 
) ENGINE=INNODB; 

這將刪除Foo記錄被刪除時的任何「孤兒」。

+0

感謝凱文,這幾乎是我所需要的,除了是否刪除它取決於它是否被另一個表引用。我會怎麼做? – Ying 2010-03-24 20:53:53

+0

@Ying這是應該做的。如果它沒有被另一個表引用,它只會刪除一些東西。 – 2010-03-24 21:06:05