如果更新,则在同一张表上执行触发器

Posted

技术标签:

【中文标题】如果更新,则在同一张表上执行触发器【英文标题】:Execute a trigger on the same table if updating 【发布时间】:2019-08-21 03:16:07 【问题描述】:

我需要在同一张表上执行一个包含UPDATE 语句的触发器。

我已经尝试过这段代码。如果我检查表格,行会更新,但我会收到一条错误消息:

无法更新存储函数/触发器中的表“订单”,因为它已被调用此存储函数/触发器的语句使用

DROP TRIGGER IF EXISTS UpdateTotal;

DELIMITER |

CREATE TRIGGER UpdateTotal BEFORE UPDATE ON Orders
FOR EACH ROW 
BEGIN
  UPDATE Orders P1
    SET NEW.order_total = NEW.order_total + 3.02
    WHERE order_id IN (SELECT * FROM (SELECT MAX(order_id) FROM Orders) P2);
END

|

DELIMITER ;

【问题讨论】:

【参考方案1】:

您不能在触发器中完成所有这些操作。根据documentation:

在存储的函数或触发器中,不允许修改 已被(用于读取或写入)的表 调用函数或触发器的语句。

详细解释需求和表结构。

【讨论】:

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

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

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

表上触发器导致慢查询

瞬间截断和插入同一张表

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

触发器处理表更新