MySQL在并發(fā)情況下,可以允許多個(gè)用戶同時(shí)訪問(wèn)相同的數(shù)據(jù)。但是,如果有多個(gè)用戶同時(shí)進(jìn)行寫操作,就可能出現(xiàn)數(shù)據(jù)混亂的情況。為了防止這種情況的發(fā)生,MySQL引入了表鎖來(lái)保證數(shù)據(jù)的一致性。
在什么情況下,MySQL會(huì)加表鎖呢?一般情況下,MySQL在執(zhí)行寫操作時(shí)會(huì)自動(dòng)加鎖。下面這些情況會(huì)自動(dòng)加鎖:
INSERT UPDATE DELETE REPLACE ALTER TABLE LOCK TABLES SET AUTOCOMMIT=0
當(dāng)然,也可以通過(guò)使用LOCK TABLES
命令手動(dòng)加鎖。這個(gè)命令可以同時(shí)對(duì)多個(gè)表加鎖,并且可以指定鎖的類型。下面是LOCK TABLES
命令中可以使用的鎖的類型:
READ - 允許其他用戶讀該表 WRITE - 禁止其他用戶讀/寫該表 LOW_PRIORITY WRITE - 只有在沒有其他用戶讀/寫該表時(shí)才加鎖
手動(dòng)加鎖需要在使用完后手動(dòng)釋放鎖,否則會(huì)導(dǎo)致死鎖的問(wèn)題。因此,在實(shí)際應(yīng)用中應(yīng)該謹(jǐn)慎使用手動(dòng)加鎖。