2
我讀過MySQL 14.2.7.6的文檔。鎖由不同的SQL語句用在InnoDBMySQL重複密鑰錯誤導致在重複索引記錄上設置共享鎖?
http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html
我的問題設置:
我不明白爲什麼文檔狀態:
如果發生重複鍵錯誤,設置重複索引 記錄的共享鎖。如果另一個 會話已具有排他鎖,則如果使用共享鎖,則會導致死鎖,因爲 會有多個會話嘗試插入同一行。如果另一個會話刪除該行,則會發生這種情況。
爲什麼它在該行上設置鎖定,因爲INSERT操作的 失敗。它獲得了什麼鎖?
當執行「SELECT ... LOCK IN SHARE MODE」時是否設置了意圖共享(IS)鎖定?當「UPDATE,INSERT,DELETE」或「SELECT ... FOR UPDATE」爲 執行時,意向排他(IX)鎖定集 ?
嗨。第一個問題。你的意思是它獲得了鎖以保持其在同一交易中的操作不會被阻止? – Alexis
不,我的意思是如果允許同時刪除這兩個事務將會不一致。設想「交易B」成功(即,如果「交易A」沒有設置鎖定)。第二次INSERT嘗試的結果是什麼?選項1:成功。但是這與第一次嘗試失敗不一致。選項2:失敗。但併發事務已刪除該行,所以不應該有衝突。 – RandomSeed
謝謝。 RS。現在明白了 – Alexis