调用触发器时,Mysql无法更新行

时间:2013-06-22 15:46:50

标签: mysql database database-design triggers mysql-error-1442

当我尝试在表中插入新行时,我的触发器失败,因为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.

感谢您的回答,

1 个答案:

答案 0 :(得分:1)

在MySQL中,您无法在表A的触发器中更新(或插入)表A.

http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html

您可以尝试使用sproc并使用事务,或者考虑PostgreSQL,它可以执行此操作。