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