【发布时间】:2014-08-15 06:38:22
【问题描述】:
我编写了一个在删除行之前运行的触发器,该触发器更新了一个汇总该表中数据的表。当我一次删除一行时,触发器运行良好。但是,如果我要使用类似的语句一次删除多行
DELETE FROM myTable WHERE id BETWEEN 1 and 100;
触发器会在下一行被删除之前完全在第一行运行,还是触发器会同时运行?
【问题讨论】:
标签: mysql triggers delete-row
我编写了一个在删除行之前运行的触发器,该触发器更新了一个汇总该表中数据的表。当我一次删除一行时,触发器运行良好。但是,如果我要使用类似的语句一次删除多行
DELETE FROM myTable WHERE id BETWEEN 1 and 100;
触发器会在下一行被删除之前完全在第一行运行,还是触发器会同时运行?
【问题讨论】:
标签: mysql triggers delete-row
触发器将针对每一行完全运行,请参阅Trigger FAQ
A.5.3:MySQL 5.6 是否有语句级或行级触发器?
在 MySQL 5.6 中,所有触发器都是 FOR EACH ROW——也就是说,触发器是 为插入、更新或删除的每一行激活。 MySQL 5.6 不支持使用 FOR EACH STATEMENT 的触发器。
这对当前最新版本有效,MySQL 5.7 也是。
【讨论】:
来自http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
FOR EACH ROW 后面的语句定义了触发器主体;也就是说,每次触发器激活时要执行的语句,对于受触发事件影响的每一行都会发生一次。在示例中,触发器主体是一个简单的 SET,它将插入到数量列中的值累积到用户变量中。该语句将该列称为 NEW.amount,意思是“要插入新行的金额列的值”。
删除事务只会发生一次,但是对于受查询影响的每一行都会发生触发器
【讨论】: