避免在尝试获取锁时发现死锁;尝试在重复密钥更新时在MariaDB(MySQL)INSERT上重新启动事务
我有一张简单的桌子,上面有很多行。没有外键。在多个列上有一个唯一键 以下是insert语句的示例:避免在尝试获取锁时发现死锁;尝试在重复密钥更新时在MariaDB(MySQL)INSERT上重新启动事务,mysql,mariadb,database-deadlocks,Mysql,Mariadb,Database Deadlocks,我有一张简单的桌子,上面有很多行。没有外键。在多个列上有一个唯一键 以下是insert语句的示例: INSERT INTO das_args (a,b,c,d) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE VALUES(1,2,3,4) 唯一键是(a、b、c) 错误是: (1213, 'Deadlock found when trying to get lock; try restarting transaction') 我已经读过这篇文章,它是一篇关于
INSERT INTO das_args (a,b,c,d) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE VALUES(1,2,3,4)
唯一键是(a、b、c)
错误是:
(1213, 'Deadlock found when trying to get lock; try restarting transaction')
我已经读过这篇文章,它是一篇关于同一个错误消息被不同用例触发的精彩讨论
自动提交是正确的。这是唯一的声明。没有开始或承诺
我看不出有什么方法可以重构它。只有两个客户端似乎同时更新相同的唯一密钥(这不应该发生,但确实发生)。我的代码只是重新运行了该语句,它成功了,但我想删除死锁错误。首先,我希望语法正确
INSERT INTO das_args (a,b,c,d)
VALUES (1,2,3,4)
ON DUPLICATE KEY UPDATE d = VALUES(d);
至于死锁——听起来事务中不止一条语句。让我们通过COMMIT
查看BEGIN
自动提交的值是多少?首先,我希望语法是
INSERT INTO das_args (a,b,c,d)
VALUES (1,2,3,4)
ON DUPLICATE KEY UPDATE d = VALUES(d);
至于死锁——听起来事务中不止一条语句。让我们通过COMMIT
查看BEGIN
自动提交的值是多少?自动提交为真。这是唯一的声明。没有begin或commit。使用UNIQUE(a、b、c)
,我很惊讶您可能会出现死锁。请提供显示引擎INNODB状态的“最新死锁”部分代码>我也很惊讶!我将获得输出。自动提交为true。这是唯一的声明。没有begin或commit。使用UNIQUE(a、b、c)
,我很惊讶您可能会出现死锁。请提供显示引擎INNODB状态的“最新死锁”部分代码>我也很惊讶!我会得到输出。