acantepie
acantepie

Reputation: 379

Mysql can't update rows when my trigger is called

My trigger fails when i try to insert a new row in my table because Mysql doesn't support updating rows in the same table the trigger is assigned to. Does anyone have suggestions on a good workaround/alternative?

My trigger:

-- 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 ;

Error Sql that is displayed when i try to insert new row:

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.

Thanks for answer,

Upvotes: 0

Views: 1466

Answers (1)

Neil McGuigan
Neil McGuigan

Reputation: 48236

In MySQL, You can't update (or insert in) table A in a trigger for table A.

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

You can try a sproc and use a transaction, or consider PostgreSQL, which can do this.

Upvotes: 1

Related Questions