我在 MySQL 数据库中有一个名为 orders
的表。在我们收到资金之前, payment_date
属性为 Null,此时它会更新为日期。一旦更新了 payment_date code> 属性,
order_state code> 属性就会更新(手动!) 1 或2 变为值 3。
我想创建一个触发器来自动执行此流程。这是我的尝试:
DELIMITER $$ CREATE TRIGGER update_order_state AFTER UPDATE ON orders FOR EACH ROW BEGIN IF ( NEW.payment_date IS NOT NULL AND NEW.order_state IN (1, 2) ) THEN UPDATE orders SET order_state = 3 WHERE NEW.payment_date IS NOT NULL and NEW.order_state IN (1, 2); END IF; END $$ DELIMITER ;
当我调用它时,我收到以下错误消息:
[HY000][1442] 无法更新存储函数/触发器中的表“orders”,因为它已被调用此存储函数/触发器的语句使用。
考虑到这可能是锁定的情况(或无限循环的风险),我将触发器更改为BEFORE UPDATE
。但是,我收到了同样的错误消息。
我该如何解决这个问题?
谢谢!
好的,鉴于您在上面评论过,您只需要更新生成触发器的行,您可以在触发器主体中不使用
UPDATE
的情况下完成此操作。设置
NEW.
仅适用于生成触发器的相应行。触发器主体一次处理一行,由
FOR EACH ROW
指示。因此,如果生成此触发器的UPDATE
操作涉及多行,则每次将处理一行。更改
NEW.
的任何值需要使用BEFORE
触发器。一旦AFTER
触发器运行,再更改任何值都为时已晚。