僵局,我有以下查詢(所有表都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