繁体   English   中英

触发器内的循环和条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM