Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中,如何在同一个表中使用AFTER/BEFORE INSERT ON触发器更新表中的所有旧行?_Mysql_Triggers - Fatal编程技术网

在mysql中,如何在同一个表中使用AFTER/BEFORE INSERT ON触发器更新表中的所有旧行?

在mysql中,如何在同一个表中使用AFTER/BEFORE INSERT ON触发器更新表中的所有旧行?,mysql,triggers,Mysql,Triggers,在向表中插入新行之前/之后,我需要将表中所有旧行的status列更新为false 我访问了这些,但没有解决我的问题。 以下是我收到的错误消息: 原因:java.sql.SQLException:无法更新存储函数/触发器中的表“table\u name”,因为调用此存储函数/触发器的语句已使用该表。您不能使用触发器更新运行触发器的同一表,因为创建无限循环的风险太高了 例如,一个insert触发器更新其表,该表在更新时运行另一个触发器,该表插入到同一个表,该表运行insert触发器 你不能也不需要

在向表中插入新行之前/之后,我需要将表中所有旧行的status列更新为false

我访问了这些,但没有解决我的问题。

以下是我收到的错误消息:


原因:java.sql.SQLException:无法更新存储函数/触发器中的表“table\u name”,因为调用此存储函数/触发器的语句已使用该表。

您不能使用触发器更新运行触发器的同一表,因为创建无限循环的风险太高了

例如,一个insert触发器更新其表,该表在更新时运行另一个触发器,该表插入到同一个表,该表运行insert触发器

你不能也不需要使用触发器。相反,在应用程序中插入之前,使用事务并运行更新

伪代码:

START TRANSACTION;
UPDATE table_name SET status = false;
INSERT INTO table_name ...values...
COMMIT;

是的,对你说的完全满意…谢谢你@Bill
START TRANSACTION;
UPDATE table_name SET status = false;
INSERT INTO table_name ...values...
COMMIT;