这个问题在这里已经有答案了:
mysql-插入后更新相同表的触发器(6个答案)
9个月前关门了。
我有以下表格结构:
这个触发器:
DELIMITER |
CREATE TRIGGER `credits__after_insert` AFTER INSERT ON `credits`
FOR EACH ROW BEGIN
UPDATE `clients`
SET `clients`.`available_credits` =
(SELECT SUM(`amount`) FROM `credits`
WHERE `client_id` = NEW.client_id )
WHERE `clients`.`id` = NEW.client_id;
UPDATE `credits`
SET NEW.`remaining` =
(SELECT SUM(`amount`) FROM `credits`
WHERE `client_id` = NEW.client_id );
END;
|
DELIMITER ;
每次尝试插入新行时,都会收到以下错误:
# 1442 - Can't update table 'credits' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我不明白为什么它会给我这个错误。我也不想收到类似的问题/答案,因为在过去的两个小时里,我已经试过了。我想要一个简单易懂的解释,如果可能的话还有一个解决办法。
谢谢。
2条答案
按热度按时间rqmkfv5c1#
不能更新同一个表。
但是你应该有一张单独的table
信用值(信用id,
available_credits
,remaining
)更新这个。当你需要信息的时候,你只需要加入表格
只能用总和更新插入的当前行
或者像akina指出的没有分隔符的单一命令
wrrgggsh2#
你尝试更新
credits
扣动扳机。但是,触发器是在credits
. 因此credits
在触发器内部会导致触发器一次又一次地开火。这就是mysql禁止这种星座的原因。
我想你需要重写这本书
UPDATE
的credits
在触发器内部直接修改新条目。