僵局,我有以下查询(所有表都InnoDB的)如何避免在MySQL
INSERT INTO busy_machines(machine)
SELECT machine FROM all_machines
WHERE machine NOT IN (SELECT machine FROM busy_machines)
and machine_name!='Main'
LIMIT 1
从而导致死锁,当我在线程中运行它,内部的选择显然是因为,对不对?
我得到的错误是:
(1213, 'Deadlock found when trying to get lock; try restarting transaction')
我怎样才能避免僵局?有没有办法改变查询来使它工作,还是我需要做别的事情?
错误不会总是发生,当然,只有在多次运行此查询并在多个线程中出现错误。
您是否遇到死锁或锁争用? – Quassnoi 2010-03-18 13:47:54
@Quassnoi:我在问题中添加了信息 - (1213,'尝试锁定时发现死锁;尝试重新启动事务') – olamundo 2010-03-18 14:09:33
'show innodb status'会简要描述上一个死锁的原因 – jonny 2010-03-18 15:37:15