[英]loops and conditionals inside triggers
我有想作为触发器实现的逻辑,但是我不知道该怎么做! 我想创建一个触发器,当删除一行时,它会检查其某一列的值是否存在于另一个表中,如果存在,它还应该基于另一个列对另一个表执行删除操作。
可以这么说,我们有一个表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
}
我在伪代码中跳了一些圈,但我希望大家都知道我的发展方向。 看来我需要的是一种在触发器语句中执行条件和循环(在删除多行的情况下?)的方法。 到目前为止,我什么都找不到。 这是不可能的,还是这种不好的做法? 谢谢!
如果在这些表之间没有设置外键关系,则需要这样做。 我将向您展示创建表时用于设置所需内容的命令。 显然,您只需要更新表即可。
CREATE TABLE foo (id INT, bar_id INT,
FOREIGN KEY (bar_id) REFERENCES bar(id)
ON DELETE CASCADE
) ENGINE=INNODB;
删除Foo记录时,这将删除所有“孤儿”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.