gpt4 book ai didi

mysql - 我的MySQL触发器不起作用,语法简单,不复杂

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:52 25 4
gpt4 key购买 nike

我不知道为什么我的触发器不起作用,当我手动使用它时查询有效,但是当我想通过触发器更新时它不起作用。谁能帮我知道为什么?

这是我的触发器:

    CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table`
FOR EACH ROW BEGIN
IF (NEW.played_games <> OLD.played_games)
THEN
update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));
END IF;
END

很简单,这是一个体育比赛,当统计人员捕获比赛的得分时,他会自动添加一个 played_game 以及相应的赢、平或输的游戏,所以我的触发器应该在他 played_games 改变时自动执行并且它有更改 PTS 列。但它不起作用。

另外,当我手动编辑 played_games 列时,我收到此错误:“无法更新存储函数/触发器中的表 pos_table,因为它已被调用此存储函数/触发器的语句使用”。

最佳答案

A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

来自:Stored program restrictions .

通常使用在插入时触发的触发器,如果​​您想更改正在插入的值,您可以创建类型为 BEFORE INSERT 的触发器并更改 NEW< 中的值

还注意到下面的语句不是您想要的。

update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));

它会更新整个表,而我认为您只是想更新特定行。无论如何,这是一个简单的计算,因此您实际上不需要存储此列。您可以在显示时轻松计算值并使您的代码更简单 + 避免触发器问题。

关于mysql - 我的MySQL触发器不起作用,语法简单,不复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com