gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:48:38 31 4
gpt4 key购买 nike

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

当表 ACCOUNTS 中有新的 INSERT 时,我需要更新 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:我已经通过了Updating table in trigger after update on the same table , Insert into same table trigger mysql , Update with after insert trigger on same tablemysql trigger with insert and update after insert on table但他们似乎没有回答我的问题。

编辑

帐户表:

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

最佳答案

看来你不能在触发器中完成所有这些。根据documentation :

Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

根据this answer , 看来你应该:

create a stored procedure, that inserts into/Updates the target table, then updates the other row(s), all in a transaction.

使用存储过程,您将手动提交更改(插入和更新)。我没有在 MySQL 中这样做过,但是 this post看起来是一个很好的例子。

关于MySQL - 插入后更新同一个表的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877732/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com