更新时在同一张表上执行触发器

Posted

技术标签:

【中文标题】更新时在同一张表上执行触发器【英文标题】:Execute a trigger on the same table when updating 【发布时间】:2019-08-20 08:49:35 【问题描述】:

我想在 phpMyAdmin-mysql 中执行一个触发器,该触发器在同一个表上包含一个 UPDATE 语句,如下所示:

create trigger AFTER INSERT ON Table
  FOR EACH ROW BEGIN
    UPDATE Table
      SET Total = NEW.Total + 1.03
      WHERE order_number = NEW.order_number;
   END

也许,不可能得到这个。如果没有,有什么方法可以模拟吗?

【问题讨论】:

进行插入时是否可以存在具有相同订单号的预先存在的行? 不,order_number 是关键列 【参考方案1】:

MySQL 有一个约束,您不能在触发器中更新同一个表。但是,如果 order_number 对 INSERT 是唯一的,我认为您可以通过修改 BEFORE INSERT 触发器中的 Total 值来实现相同的结果:

CREATE TRIGGER update_total BEFORE INSERT ON Table
FOR EACH ROW 
BEGIN
  SET NEW.Total = NEW.Total + 1.03;
END

Demo on dbfiddle

【讨论】:

没有错误,但我的 Total 列没有变化 @AlbertoMuñozSánchez 我添加了一个演示,显示它适用于一个简单的示例...... 我认为问题出在我的 phpMyAdmin 界面上。我不熟悉它,我无法编写您向我展示的完整代码。事实上,如果我复制它,我会遇到语法错误,而且它只有在我只写SET NEW.Total = NEW.Total + 1.03 时才有效。在phpMyAdmin界面里面应该怎么写? @AlbertoMuñozSánchez 在 phpMyAdmin 中您需要在定义触发器之前使用 DELIMITER //,在 END 之后需要 //,之后需要 DELIMITER ;

以上是关于更新时在同一张表上执行触发器的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 触发器在同一张表上执行 UPDATE 和 INSERT

我想在同一张表上创建更多触发器

表上触发器导致慢查询

瞬间截断和插入同一张表

Oracle更新触发器在同一个表上

触发器处理表更新