3
在日誌中我有一個與此相關的查詢死鎖:MySQL的插入
INSERT INTO `driver_state` (id, state)
VALUES('83799','waiting')
ON DUPLICATE KEY UPDATE
state = IF(state = 'active', state, VALUES(state));
確切錯誤:
ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction
我試圖原因,並瞭解如何查詢可以甚至可能導致僵局,但還沒有走得很遠。
表結構
CREATE TABLE IF NOT EXISTS `driver_state` (
`id` int(11) NOT NULL,
`state` enum('inactive','waiting_orders','has_order','busy') DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
在這種情況下,我們使用MEMORY表,但是InnoDB的具有相同的鎖定問題。
表獲取大量這些插入重複鍵查詢和選擇查詢(所有選擇查詢都非常快速和優化)。交易不會在任何地方使用,也不能手動鎖定等。
請問您可以提出任何可能導致這種情況的想法嗎?