我不知道为什么我的触发器不起作用,当我手动使用它时查询有效,但是当我想由触发器更新时它不起作用。有人可以帮我知道为什么吗?
这是我的触发器:
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_games2)+(NEW.tie_games1)); END IF; END 简单来说,这是一场体育比赛,当统计人员捕获比赛得分时,他会自动添加一个playd_game,这是各自的赢,平局或输局,因此我的触发器应在他的play_games更改时自动执行,并且必须更改PTS栏。但这不起作用。
同样,当我手动编辑playd_games列时,也会出现此错误:“无法更新存储函数/触发器中的表pos_table,因为调用该存储函数/触发器的语句已使用该表”。
存储的函数或触发器无法修改调用该函数或触发器的语句已在使用(用于读取或写入)的表。
来自:存储的程序限制。
通常,使用在插入时触发的触发器,如果要更改要插入的值,请创建该类型的触发器,BEFORE INSERT然后更改NEW
还注意到以下语句不是您想要的。
update pos_table set PTS=((NEW.won_games2)+(NEW.tie_games1)); 我认为您只是在尝试更新单独的行,它会更新整个表。无论如何,这是一个简单的计算,因此您实际上不需要存储此列。您可以轻松地在显示时计算值,并使代码更简单+避免触发器问题。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。