MySQL上的死锁vs Lockwait超时

Bry*_*yan 4 mysql deadlock

任何人都可以解释我在MySQL 5.1上发现的Deadlock和Lockwait错误的细节.它是一样的吗?何时发生死锁错误以及何时发生lockwait超时?

egg*_*yal 19

死锁发生其中存在交易必须为了获得锁之间的循环依赖关系进行:例如,假设事务1持有锁A,但需要获得锁B至前进; 并且事务2持有锁B但需要获取锁A以继续 - 事务立即死锁(不需要超时)并且在释放其锁之前都不能继续.因此,唯一的解决方案是回滚一个事务(一个应用程序代码应该检测到这种可能性并相应地处理,通常是再次尝试事务).

等待超时时所配置的超时时间(例如发生innodb_lock_wait_timeout 在InnoDB中的锁的情况下),而经过一个事务等待一个锁,也许是因为一个缓慢的查询持有锁,并没有执行完毕.如果事务等待的时间更长,则可能(甚至可能)锁定可用并获取,但存在超时以避免应用程序无限期地等待数据库.