首页 >数据库 >mysql教程 >如何在插入后更新同一个表而不发生触发错误?

如何在插入后更新同一个表而不发生触发错误?

Barbara Streisand
Barbara Streisand原创
2024-12-10 22:22:10817浏览

How Can I Update the Same Table After an Insert Without Trigger Errors?

插入后更新同一个表的触发器:另一种方法

问题概述

您寻求在 ACCOUNTS 表上实现一个触发器,该触发器根据 edit_on 值更新同一表中的列新插入的行。但是,由于限制在调用它的触发器内更新同一个表,您会遇到错误。

替代解决方法:存储过程

要规避此限制,可以使用存储过程在单个事务中执行插入和更新操作。这种方法允许手动提交更改,从而实现所需的更新。

存储过程实现

以下是实现您的目标的示例存储过程:

DELIMITER $$
CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT)
BEGIN
  -- Insert new row into ACCOUNTS
  INSERT INTO ACCOUNTS (pk, user_id, edit_on, status)
  VALUES (new_pk, /* user_id */, NULL, 'A');
  
  -- Update existing row in ACCOUNTS
  UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on;
  
  -- Commit transaction
  COMMIT;
END$$
DELIMITER ;

用法

使用此存储的过程,以新插入行的主键作为参数调用它:

CALL InsertAndEditStatus(2147483726);

此过程将插入具有指定主键和默认值的新行,然后更新由新插入的行中的 edit_on 列表示它已被编辑。

以上是如何在插入后更新同一个表而不发生触发错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn