mysql “WHERE” 子句中同時使用多個字段篩選,鎖表還是鎖行?
如題所述,MySQL 中使用 “WHERE” 子句時,經常需要指定多個條件來篩選目標行。那么,當這些條件涉及多個字段時,MySQL 會采用哪種鎖機制呢?
以 “UPDATE SET name = ‘xxx’ WHERE id = 1 AND is_delete = 0” 語句為例,該語句試圖更新 id 為 1 且 is_delete 為 0 的行。
由于 MySQL 默認的行鎖機制,當執行此語句時,只會鎖定符合條件的行,不會鎖住整個表。原因如下:
- 篩選條件明確指定了 id 和 is_delete 兩個字段,MySQL 將根據這些字段的索引快速定位目標行。
- 只有符合這兩個條件的行才會被鎖定,從而確保數據一致性,同時允許其他會話同時訪問表中的其他行。
在這種情況下,盡管 “WHERE” 子句使用了 id 和 is_delete 兩個字段進行篩選,但 MySQL 會針對符合條件的行進行行鎖,避免不必要的表鎖。