触发器内的循环和条件

时间:2010-03-24 03:23:44

标签: mysql sql triggers

我有这个逻辑我想作为触发器实现,但我不知道该怎么做!我想创建一个触发器,当一行被删除时,它会检查其中一个列的值是否存在于另一个表中,如果存在,它还应该根据另一个列对另一个表执行删除操作。

所以说我们有一个桌子Foo,有栏杆,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

}

我在那个伪代码中跳了一些箍,但我希望你们都能到达我想去的地方。似乎我需要的是一种方法来执行条件并在触发器语句中循环(在多行删除的情况下?)。到目前为止,我还没有找到任何东西。这是不可能的,还是这种不好的做法?谢谢!

1 个答案:

答案 0 :(得分:2)

如果您没有在这些表之间设置外键关系,则需要这样做。我将向您展示在创建表时设置所需内容的命令。显然,您只需要更新表格。

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

当删除Foo记录时,这将删除任何“孤儿”。