MySQL中行鎖是指在某個事務中,只有對一行進行加鎖,其它事務才不能對這行進行修改。這種鎖機制能夠有效地保證數(shù)據(jù)的一致性,防止數(shù)據(jù)沖突和損壞。
// 行鎖使用方式一:FOR UPDATE LOCK TABLES t1 WRITE; SELECT * FROM t1 WHERE id=1 FOR UPDATE; UPDATE t1 SET c=c+1 WHERE id=1; COMMIT; UNLOCK TABLES; // 行鎖使用方式二:SELECT ... FOR UPDATE START TRANSACTION; SELECT * FROM t1 WHERE id=1 FOR UPDATE; UPDATE t1 SET c=c+1 WHERE id=1; COMMIT;
使用方式一中,首先需要將表t1進行寫鎖操作,防止其它事務修改該表。然后使用SELECT ... FOR UPDATE語句對id=1的行進行加鎖,防止其它事務修改該行。然后進行數(shù)據(jù)的修改操作,最后提交并釋放鎖。
注意,使用方式一中如果不加LOCK TABLES語句,可能會出現(xiàn)死鎖的情況,因此我們必須將整個表進行加鎖。
使用方式二中,通過START TRANSACTION語句開啟一個事務,使用SELECT ... FOR UPDATE語句加鎖后進行數(shù)據(jù)的修改操作,最后提交事務。這種方式可以避免死鎖的情況。
上一篇docker19版本說明
下一篇docker19版本