插入后更新同一个表的触发器:另一种方法
问题概述
您寻求在 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中文网其他相关文章!