MySQL – 插入后更新同一张表的触发器

本教程将介绍MySQL - 插入后更新同一张表的触发器的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

MySQL - 插入后更新同一张表的触发器 教程 第1张

问题描述

这是我想要做的:

当有一个新的 INSERT 到表 ACCOUNTS 中时,我需要更新 ACCOUNTS 中的行 pk = NEW.edit_on 通过设置 status='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

但是,我无法更新同一张表:无法更新表 ACCOUNTS ... 已被调用此触发器的语句使用

请提出解决方法

PS:我已经完成了 更新表在同一张表更新后触发,插入同一张表触发mysql, 在同一张表上使用插入后触发器更新和 mysql 在表上插入和更新后触发 但他们似乎没有回答我的问题.

编辑

账户表:

CREATE TABLE  `ACCOUNTS` (
  `pk` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(9) unsigned NOT NULL,
  `edit_on` bigint(10) unsigned DEFAULT NULL,
  `status` varchar(1) NOT NULL DEFAULT 'A',
  PRIMARY KEY (`pk`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2147483726 DEFAULT CHARSET=latin1

推荐答案

看来你不能在一个触发器中完成这一切.根据文档:

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

根据 这个答案,看来你应该:

创建一个存储过程,插入/更新目标表,然后更新其他行,所有这些都在一个事务中.

使用存储过程,请问手动提交更改(插入和更新).我没有在 MySQL 中这样做,但 这篇文章 看起来不错例子.

好了关于MySQL - 插入后更新同一张表的触发器的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。