当我尝试在表中插入新行时,我的触发器失败,因为Mysql不支持更新触发器分配给同一个表中的行。有没有人对一个好的解决方法/替代方案有什么建议?
我的触发器:
-- Trigger DDL Statements
DELIMITER $$
CREATE TRIGGER check_sequence
BEFORE INSERT ON data FOR EACH ROW
BEGIN
IF EXISTS(SELECT TRUE FROM data WHERE sequence = NEW.sequence) THEN
UPDATE data SET sequence=sequence+1 WHERE sequence >= NEW.sequence;
END IF;
END $$
DELIMITER ;
我尝试插入新行时显示的错误Sql:
ERROR 1442 (HY000): Can't update table 'data' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
感谢您的回答,
答案 0 :(得分:1)
在MySQL中,您无法在表A的触发器中更新(或插入)表A.
http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html
您可以尝试使用sproc并使用事务,或者考虑PostgreSQL,它可以执行此操作。