mysql的加鎖與死鎖問題

記錄下網上看到的又用的資料:需要反覆閱讀以加深理解啊


 sql語句: delete from t1 where id = 10;

  RC(Read Commited) RR(Repeatable Read )
id主鍵+RC 只需要對id對應的記錄加上排它鎖 同RC
id唯一索引+RC 需要在id對應的唯一索引上加鎖,需要在聚簇索引上對應的記錄加鎖 同RC
id非唯一索引+RC 所有滿足SQL查詢條件的記錄都加鎖,同事這些記錄在主鍵索引上的記錄也會加鎖 通過id索引定位到第一條滿足條件的記錄,加記錄的排他鎖,加GAP上的GAP鎖,
然後加主鍵聚簇索引上的記錄排它鎖。然後讀取嚇一跳,重複進行,直到進行到
不再滿足條件的記錄, 此時不加記錄的排它鎖,但是需要加GAP鎖。
id無索引+RC 通過聚簇索引進行全表掃描,然後對每條記錄都加鎖。 鎖表上所有記錄,同事鎖上聚簇索引內的所有GAP,以杜絕發生更新/插入/刪除 操作。


http://hedengcheng.com/?p=771MySQL 加鎖處理分析,博主分析的很詳細,閱讀後受益匪淺

http://hedengcheng.com/?p=844:一個最不可思議的MySQL死鎖分析:仔細閱讀後,對mysql的加鎖理解更加深一步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章