這裏是一些mysql inno_bd表t
主鍵id
和多個btree三個字段的索引。 場A,B,C分別 是int
,int
,Date
: 問題是出在以下幾點: 有存檔t_archive
表,我用它來記錄從t
移動到t_archive
如果已經過時。要移動記錄我用兩個查詢:mysql innodb多個索引鎖查詢過多行
INSERT INTO t_archive SELECT * FROM t WHERE A = 1 AND B = 2 AND C = 3
DELETE FROM t WHERE A = 1 AND B = 2 AND C = 3
(正如您所注意到,滿足條件的id是4和5) 在上述查詢我嘗試UPDATE
recods與ids:1和8. 邏輯上,沒有理由lock
記錄1,2,3,3,6,7,8鑽出任何類型的查詢, 但它發生! 因爲真正的紅色部分比例如,在更大的,轉移操作需要很多時間(約50秒),我不能與其他地區經濟共同體的工作(只更新其中id = 8) - 得到一個例外:Lock wait timeout exceeded; try restarting transaction
任何人都可以解釋爲什麼會發生,以及如何避免它?
對發生的事情的解釋很棒:) – artaxerxe 2015-12-08 10:51:47