2

遇到了这个奇怪的问题,一个简单的查询由于死锁而失败这是查询

UPDATE myprobelmatictable SET  mycolumn = (mycolum-0)  WHERE id = '59' 

奇怪的问题是,只有当我的 php 服务器位于远程网络上较慢的服务器上时,此查询才会失败

在我运行此查询之前,会发生以下情况

transaction starts

insert new row in table 5

select 1 row from myproblematictable

insert new row in table 6

update table 4

UPDATE myprobelmatictable SET  mycolumn = (mycolum-0)  WHERE id = '<id>'

update table 3

Commit Transaction

奇怪的是每次相同的查询都会失败,并出现以下错误

Error Number: 1213</p><p>Deadlock found when trying to get lock; try restarting transaction

innodb status 命令似乎没有提到 myproblematictable

任何线索?

4

1 回答 1

0

这可能是另一个查询以不同的顺序更新表的结果。我会尝试查看是否存在应该更新表的预定顺序,如果是,则重写更新顺序。

如果没有,我建议尝试找到有问题的查询,并查看他们更新表格的顺序。您使用的是什么类型的表引擎?请记住,MyISAM 会锁定整个表。

于 2013-09-03T18:12:41.813 回答