【问题标题】:Trigger on MySQL table when multiple rows deleted删除多行时在 MySQL 表上触发
【发布时间】:2014-08-15 06:38:22
【问题描述】:

我编写了一个在删除行之前运行的触发器,该触发器更新了一个汇总该表中数据的表。当我一次删除一行时,触发器运行良好。但是,如果我要使用类似的语句一次删除多行

DELETE FROM myTable WHERE id BETWEEN 1 and 100;

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

【问题讨论】:

    标签: mysql triggers delete-row


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的确认。我在sqlfiddle 上对此进行了测试,在那里我创建了一个触发器来计算表中的行数并将其保存到日志表中。随后的结果证明触发器确实在下一行被删除之前运行。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2018-10-09
      • 1970-01-01
      • 2010-12-29
      • 2012-06-29
      • 1970-01-01
      相关资源
      最近更新 更多