MySQL數據庫的鎖機制是保證并發訪問數據安全的關鍵性質。根據鎖的粒度,可以分為表鎖和行鎖兩種類型。
表鎖顧名思義,是對整張表進行加鎖。當一個事務針對某一張表進行操作時,表鎖將禁止其它事務對該表執行任何操作,直到該事務完成并釋放鎖。
-- 以鎖定'person'表示例 LOCK TABLES person WRITE; -- 對'person'表的操作... -- ... UNLOCK TABLES;
可以看到,當使用表鎖時,需要顯式地對表進行加鎖(使用LOCK TABLES語句),并在完成操作后釋放鎖(使用UNLOCK TABLES語句)。
相比之下,行鎖則是對表中某一行(或者某些行)進行加鎖。當一個事務針對某一行進行操作時,行鎖將禁止其它事務對該行執行寫操作,但允許其它事務對該行進行讀操作。
-- 以鎖定'person'表中id=1的行示例 BEGIN; -- 進行行鎖 SELECT * FROM person WHERE id=1 FOR UPDATE; -- 對'person'表中id=1的行進行寫操作... -- ... COMMIT;
可見,使用行鎖時,需要開啟一個事務(使用BEGIN語句),并使用SELECT...FOR UPDATE語句對行進行加鎖。在完成操作后,需要提交事務(使用COMMIT語句)。
總體而言,行鎖粒度更小,對并發性能更友好,但也更容易出現死鎖和資源占用的問題;而表鎖粒度較大,更適合對整個表進行批量操作。
上一篇mysql數據庫鎖表解鎖
下一篇css動畫簡單