当我的触发器被调用时,Mysql 无法更新行

标签 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.

感谢您的回答,

最佳答案

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

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

您可以尝试存储过程并使用事务,或者考虑 PostgreSQL,它可以做到这一点。

关于当我的触发器被调用时,Mysql 无法更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252473/

相关文章:

json - NoSQL 是否适合存储用户数据?

database - 我应该什么时候使用 Datomic?

sql - 引用 URL 中的对象 - 您使用主键还是最佳实践是什么?

Python MySQL-查询被意外缓存

mysql 的替代字符串文字为?提供准备好的声明的文本

java - 使用选择过滤器在 Oracle 数据库之间进行批量行传输

PHP - 具有多个数据库的应用程序

mysql - 节省用户的高度和体重

mysql - mysql存储过程中超出范围的溢出处理

SQL 选择行并排除子项