#1442 - 无法更新表格' *'在存储函数/触发器中,因为它已被调用此存储函数/触发器的语句使用

时间:2017-01-08 20:51:06

标签: mysql triggers mysql-error-1442

我在SQL方面非常糟糕,但我尽量保持数据库简单和简约。不重复值,而是使用引用和id代替。

现在插入查询后我收到错误

  1442年 - 无法更新已签署的表格'在存储函数/触发器中,因为它已被调用此存储函数/触发器的语句使用

禁用触发器时可以插入查询。但我的查询只是从表格'用户'所以不应该有冲突。我读了一些关于死锁的东西 - 查询是在使用它时锁定表或类似的东西,因此触发器无法更新行?想法我怎么能实现这个目标?

我简化了我的查询,所以只有重要的事情存在。

查询:

INSERT INTO signed (time_of_start, player)
    SELECT time_of_game_id, users.user_id 
    FROM time_of_game, users
    WHERE time_of_game.time_of_start = "2017-02-01 12:00:00"
      AND users.steamid = "1234567890123456";

触发:

CREATE TRIGGER `payment_for_joining` 
AFTER INSERT ON `signed`
FOR EACH ROW 
    UPDATE users  
    SET users.credit = users.credit-1
    WHERE users.user_id = NEW.player

1 个答案:

答案 0 :(得分:0)

它不允许您更新表格,因为它已经被调用此触发器的INSERT INTO.. SELECT查询读取。

另一种方法是禁用触发器并单独更新users表,例如:

INSERT INTO signed (time_of_start, player)
SELECT time_of_game_id, users.user_id FROM time_of_game, users
WHERE time_of_game.time_of_start="2017-02-01 12:00:00"
AND users.steamid="1234567890123456";

UPDATE users join time_of_game SET users.credit = users.credit-1
where time_of_game.time_of_start="2017-02-01 12:00:00"
AND users.steamid="1234567890123456";

如果有任何列链接这两个表,您可以添加带ON子句的连接列。