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

问题描述 投票:1回答:1

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

我访问了这些但没有解决我的问题。 MySQL - Trigger for updating same table after insert

DELIMITER $$
DROP TRIGGER update_old_status $$
CREATE TRIGGER update_old_status
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
    DECLARE MYCOUNTER INT;
    SELECT COUNT(*) INTO MYCOUNTER FROM table_name;

    IF (MYCOUNTER > 0) THEN
        UPDATE table_name SET status = false WHERE status = true;
    END IF;

END $$
DELIMITER ;

这里有我的错误信息:

引起:java.sql.SQLException:无法更新存储的函数/触发器中的表'table_name',因为它已被调用此存储函数/触发器的语句使用。

mysql triggers
1个回答
1
投票

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

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

您不能也不需要使用触发器。相反,使用事务并在应用程序中的INSERT之前运行UPDATE。

伪代码:

START TRANSACTION;
UPDATE table_name SET status = false;
INSERT INTO table_name ...values...
COMMIT;
© www.soinside.com 2019 - 2024. All rights reserved.