如何避免mysql死锁?

时间:2013-04-10 18:35:26

标签: mysql database-deadlocks

我遇到了无法删除记录的问题。我一直遇到死锁超时问题。

我正在运行一个简单的查询

delete from phone_calls where status =0

一段时间后我收到此错误Lock wait timeout exceeded; try restarting transaction

我该怎么做才能解决这个问题?我的查询有问题吗?

请注意,如果我添加限制1000,它可以正常运行,但没有限制,它会遇到死锁。

1 个答案:

答案 0 :(得分:2)

首先,这不是死锁。这是一个简单的锁等待超时。死锁上给出的错误类似于“试图锁定时发现死锁”。

其次,其他一些事务仍在运行,并且在phone_calls中的一行或几行上保持锁定状态为0.如果状态不是索引,则表示您有效地持有表锁并且两个查询不能这是同一时间。删除所有这些行可能需要一段时间,而且您的工作经常运行。