删除多行时触发MySQL表

时间:2014-08-14 22:28:24

标签: mysql triggers delete-row

我写了一个在删除行之前运行的触发器,它会更新汇总此表中数据的表。当我一次删除一行时,触发器工作正常。但是,如果我要使用类似

的语句一次删除多行
DELETE FROM myTable WHERE id BETWEEN 1 and 100;

在删除下一行之前,触发器是否会在第一行完全运行,或者触发器是否会同时运行?

2 个答案:

答案 0 :(得分:1)

触发器将完全针对每一行运行,请参阅Trigger FAQ

  

A.5.3:MySQL 5.6是否具有语句级或行级触发器?

     

在MySQL 5.6中,所有触发器都是FOR EACH ROW - 也就是触发器   为插入,更新或删除的每一行激活。 MySQL的   5.6不支持使用FOR EACH STATEMENT的触发器。

这对当前最新版本MySQL 5.7也有效。

答案 1 :(得分:1)

来自http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

  

FOR EACH ROW之后的语句定义了触发器主体;也就是说,每次触发器激活时执行的语句,对于受触发事件影响的每一行都会发生一次。在该示例中,触发器主体是一个简单的SET,它将插入到amount列中的值累积到用户变量中。该语句将列称为NEW.amount,表示“要插入新行的amount列的值。”

删除事务只会发生一次,但对于受查询影响的每一行,都会发生触发