更新时在同一张表上执行触发器
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 ;
。以上是关于更新时在同一张表上执行触发器的主要内容,如果未能解决你的问题,请参考以下文章