首頁  >  問答  >  主體

mysql優化 - mysql innodb表鎖問題

經過測試之後,我發現以下情況都會導致表鎖定
1.like
2.update,delete無條件的操作
3.update,delete有條件的操作但不是主鍵的操作
select無論是有條件還是無條件,條件是不是主鍵或索引,都不會鎖定表,請問這是對的嗎?是不是我測試出現了問題?

淡淡烟草味淡淡烟草味2704 天前622

全部回覆(2)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-24 11:34:59

    select 可指定加上各級鎖如共用鎖、排他鎖等,例如select ... FOR UPDATE
    至於為什麼需要鎖,舉個簡單例子,例如你有個單據繼承自上個單據,這時候你可以select加讀鎖,鎖定上個單據,來防止其他人在你提交前對上個單據進行修改,造成數據不一致。

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-24 11:34:59

    只要條件不包含主鍵,或包含主鍵但不是等號或IN,都會鎖全表的,這就包括了問題中全部3種情況。

    不管是鎖全表還是鎖幾行,select加讀鎖,update和delete加寫鎖,至於什麼是讀鎖、寫鎖,可谷歌一下。至於細節,還可以看下事務隔離等級,這裡就不展開了。

    回覆
    0
  • 取消回覆