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