84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
經過測試之後,我發現以下情況都會導致表鎖定 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加寫鎖,至於什麼是讀鎖、寫鎖,可谷歌一下。至於細節,還可以看下事務隔離等級,這裡就不展開了。