2010-03-24 72 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