什么是mysql改行鎖?
在mysql數(shù)據(jù)庫中,鎖的粒度可以是行級鎖或者是表級鎖。當(dāng)多個(gè)用戶同時(shí)修改同一行數(shù)據(jù)的時(shí)候,使用的是改行鎖,所以在繁忙的數(shù)據(jù)庫中,行級鎖成為了最好的解決方案。
改行鎖和表鎖的區(qū)別是什么?
相對于表鎖來說,改行鎖的鎖程度更低,只會(huì)對查詢或修改的行加鎖,其他的行依舊可以被其他的功能訪問和修改。這樣能夠大大提高數(shù)據(jù)庫的并發(fā)度,而表級鎖則是整張表被鎖定,此時(shí)除了操作線程,其他線程都不能再訪問這張表了。
mysql如何使用改行鎖?
在mysql中,使用改行鎖主要是通過以下方式實(shí)現(xiàn)的:
1. 設(shè)置事務(wù)的隔離級別
在使用mysql的事務(wù)中,可以設(shè)置不同的隔離級別,其中最高的是Serializable,這個(gè)級別下使用的就是行級鎖。
2. 取得鎖的方式
行級鎖可以通過下面兩種方式取得:
(1)用SELECT語句對某行加鎖:
SELECT * FROM table WHERE id = 1 FOR UPDATE;
(2)在事務(wù)中用UPDATE或DELETE命令對某行數(shù)據(jù)進(jìn)行修改的時(shí)候,該行就被鎖定。
改行鎖和表鎖的優(yōu)缺點(diǎn)?
改行鎖的優(yōu)點(diǎn)在于提供了更高的并發(fā)度,更多的線程可以在同時(shí)訪問數(shù)據(jù)庫的行中,不會(huì)互相影響。缺點(diǎn)在于維護(hù)鎖的代價(jià)較高,需要耗費(fèi)更多的系統(tǒng)開銷。
表級鎖與之相比,優(yōu)點(diǎn)在于簡潔高效,維護(hù)開銷較小,而缺點(diǎn)在于界定數(shù)據(jù)范圍較寬,整張表被鎖定后,其他的線程都不能再次訪問該表。這在高并發(fā)場景下會(huì)造成比較嚴(yán)重的問題。