【问题标题】: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 是关键列

标签: mysql triggers phpmyadmin


【解决方案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 ;
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多