列更新时Mysql死锁

时间:2013-08-28 16:19:50

标签: mysql

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

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

任何线索?

1 个答案:

答案 0 :(得分:0)

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

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