經過測試之後,我發現以下情況都會導致表鎖定
1.like
2.update,delete無條件的操作
3.update,delete有條件的操作但不是主鍵的操作
select無論是有條件還是無條件,條件是不是主鍵或索引,都不會鎖定表,請問這是對的嗎?是不是我測試出現了問題?
曾经蜡笔没有小新2017-05-24 11:34:59
select 可指定加上各級鎖如共用鎖、排他鎖等,例如select ... FOR UPDATE
。
至於為什麼需要鎖,舉個簡單例子,例如你有個單據繼承自上個單據,這時候你可以select加讀鎖,鎖定上個單據,來防止其他人在你提交前對上個單據進行修改,造成數據不一致。
習慣沉默2017-05-24 11:34:59
只要條件不包含主鍵,或包含主鍵但不是等號或IN,都會鎖全表的,這就包括了問題中全部3種情況。
不管是鎖全表還是鎖幾行,select加讀鎖,update和delete加寫鎖,至於什麼是讀鎖、寫鎖,可谷歌一下。至於細節,還可以看下事務隔離等級,這裡就不展開了。