搜索

首页  >  问答  >  正文

MySQL - 插入操作后更新同一个表的触发器

这就是我正在尝试做的事情:

当有一个新的 INSERT 到表 ACCOUNTS 中时,我需要通过设置 status='E'phpcnend 来更新 ACCOUNTS 中的行,其中 pk = NEW.edit_on cphpcn 来表示特定(旧)帐户已被编辑。

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< /p>

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

请提出解决方法

PS:我已经完成了在同一个表上更新后在触发器中更新表、插入同一个表触发器mysql、在同一个表上使用插入后触发器更新以及在表上插入后插入和更新mysql触发器,但它们没有似乎回答了我的问题。


编辑

ACCOUNTS 表:

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


P粉419164700P粉419164700413 天前691

全部回复(2)我来回复

  • P粉063862561

    P粉0638625612023-10-17 18:44:15

    这就是我在插入时更新同一个表中的行的方法

    activationCodeemail 是表 USER 中的行。 插入时,我没有指定 activationCode 的值,它将由 MySQL 动态创建。

    username 更改为您的 MySQL 用户名,并将 db_name 更改为您的数据库名称。

    CREATE DEFINER=`username`@`localhost` 
           TRIGGER `db_name`.`user_BEFORE_INSERT` 
           BEFORE INSERT ON `user` 
           FOR EACH ROW
             BEGIN
                SET new.activationCode = MD5(new.email);
             END

    回复
    0
  • P粉262113569

    P粉2621135692023-10-17 17:55:58

    看来您无法在触发器中完成所有这些操作。根据文档

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

    使用存储过程,您将手动提交更改(插入和更新)。我还没有在 MySQL 中这样做过,但是这篇文章看起来不错示例。

    回复
    0
  • 取消回复