我需要在将新行插入该表之前/之后将表的所有旧行的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',因为它已被调用此存储函数/触发器的语句使用。
您无法使用触发器更新运行触发器的同一个表,因为创建无限循环的风险太高。
例如,插入触发器更新其表,该表在更新时运行另一个触发器,该表插入到运行插入触发器的同一个表中...
您不能也不需要使用触发器。相反,使用事务并在应用程序中的INSERT之前运行UPDATE。
伪代码:
START TRANSACTION;
UPDATE table_name SET status = false;
INSERT INTO table_name ...values...
COMMIT;