开发者社区> 问答> 正文

MySQL-插入后触发更新同一表

这是我想做的事情:

当INSERT表格中有新内容时ACCOUNTS,我需要通过设置以表示特定(旧)帐户已被编辑来更新ACCOUNTSwhere pk=中的行。NEW.edit_onstatus='E'

DELIMITER $$

DROP TRIGGER IF EXISTS setEditStatus$$ CREATE TRIGGER setEditStatus AFTER INSERT on ACCOUNTS FOR EACH ROW BEGIN update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ; END$$

DELIMITER ; 要求不是我要操纵新插入的列,而是要使用一个已经存在的列pk = NEW.edit_on

但是,我无法更新同一张表: Can't update table ACCOUNTS ... already used by the statement that invoked this trigger

展开
收起
保持可爱mmm 2020-05-10 20:36:46 336 0
1 条回答
写回答
取消 提交回答
  • 似乎您无法在触发器中完成所有这些操作。根据文档:

    在存储的函数或触发器中,不允许修改调用该函数或触发器的语句已经在使用(用于读取或写入)的表。

    根据此答案,您似乎应该:

    创建一个存储过程,该过程将插入/更新目标表,然后更新事务中的所有其他行。

    使用存储的proc,您将手动提交更改(插入和更新)。我还没有在MySQL中做到这一点,但是这篇文章看起来像一个很好的例子。来源:stack overflow

    2020-05-10 20:36:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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

相关镜像