开发者社区> 问答> 正文

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

我不知道为什么我的触发器不起作用,当我手动使用它时查询有效,但是当我想由触发器更新时它不起作用。有人可以帮我知道为什么吗?

这是我的触发器:

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,因为调用该存储函数/触发器的语句已使用该表”。

展开
收起
保持可爱mmm 2020-05-17 20:35:12 1148 0
1 条回答
写回答
取消 提交回答
  • 存储的函数或触发器无法修改调用该函数或触发器的语句已在使用(用于读取或写入)的表。

    来自:存储的程序限制。

    通常,使用在插入时触发的触发器,如果​​要更改要插入的值,请创建该类型的触发器,BEFORE INSERT然后更改NEW

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

    update pos_table set PTS=((NEW.won_games2)+(NEW.tie_games1)); 我认为您只是在尝试更新单独的行,它会更新整个表。无论如何,这是一个简单的计算,因此您实际上不需要存储此列。您可以轻松地在显示时计算值,并使代码更简单+避免触发器问题。来源:stack overflow

    2020-05-17 20:46:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像