Ich habe eine Eigenschaft namens orders
的表。在我们收到资金之前, payment_date
in einer MySQL-Datenbank, die Null ist und an diesem Punkt auf ein Datum aktualisiert wird. Sobald das Attribut payment_date code> aktualisiert ist, wird das Attribut
order_state code> (manuell!) 1 oder 2 auf den Wert 3 aktualisiert.
Ich möchte einen Trigger erstellen, um diesen Prozess zu automatisieren. Hier ist mein Versuch:
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 ;
Beim Aufruf erhalte ich folgende Fehlermeldung:
[HY000][1442] 无法更新存储函数/触发器中的表“orders”,因为它已被调用此存储函数/触发器的语句使用。
[HY000][1442] Tabelle „Bestellungen“ in der gespeicherten Funktion/dem gespeicherten Trigger kann nicht aktualisiert werden, da sie bereits von einer Anweisung verwendet wird, die diese gespeicherte Funktion/diesen gespeicherten Trigger aufruft.
In Anbetracht der Tatsache, dass es sich hier möglicherweise um eine Blockierungssituation handelt (oder das Risiko einer Endlosschleife besteht), habe ich den Auslöser auf BEFORE UPDATE
BEFORE UPDATE geändert. Ich habe jedoch die gleiche Fehlermeldung erhalten.
Wie kann ich dieses Problem lösen?
Danke!
好的,鉴于您在上面评论过,您只需要更新生成触发器的行,您可以在触发器主体中不使用
UPDATE
的情况下完成此操作。设置
NEW.
仅适用于生成触发器的相应行。触发器主体一次处理一行,由
FOR EACH ROW
指示。因此,如果生成此触发器的UPDATE
操作涉及多行,则每次将处理一行。更改
NEW.
的任何值需要使用BEFORE
触发器。一旦AFTER
触发器运行,再更改任何值都为时已晚。