我有这个逻辑我想作为触发器实现,但我不知道该怎么做!我想创建一个触发器,当一行被删除时,它会检查其中一个列的值是否存在于另一个表中,如果存在,它还应该根据另一个列对另一个表执行删除操作。
所以说我们有一个桌子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
}
我在那个伪代码中跳了一些箍,但我希望你们都能到达我想去的地方。似乎我需要的是一种方法来执行条件并在触发器语句中循环(在多行删除的情况下?)。到目前为止,我还没有找到任何东西。这是不可能的,还是这种不好的做法?谢谢!
答案 0 :(得分:2)
如果您没有在这些表之间设置外键关系,则需要这样做。我将向您展示在创建表时设置所需内容的命令。显然,您只需要更新表格。
CREATE TABLE foo (id INT, bar_id INT,
FOREIGN KEY (bar_id) REFERENCES bar(id)
ON DELETE CASCADE
) ENGINE=INNODB;
当删除Foo记录时,这将删除任何“孤儿”。