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