MySQL數據庫采用多種鎖機制,包括表級鎖和行級鎖。表級鎖在整張表上加鎖,行級鎖則只在要訪問的行上加鎖。
MySQL表級鎖有兩種模式:共享鎖(S)和排他鎖(X)。一個共享鎖能夠保證其他線程可以讀取該行數據,但不能寫入或改變該行數據。一個排他鎖能夠保證其他線程不能讀取或寫入改行數據。
行級鎖又分為共享鎖和排他鎖。共享鎖(S)能夠保證其他線程可以讀取該行數據,并且其他線程也可以持有該行的共享鎖,但不能寫入或改變該行數據。而排他鎖(X)則能保證其他線程不能讀取或寫入該行數據。
-- 以共享鎖模式查詢表中的數據,其他線程仍然可以讀取表中數據,但不能寫入或更新數據
SELECT * FROM mytable WHERE …… LOCK IN SHARE MODE;
-- 以排他鎖模式查詢表中數據,其他線程不能讀取或寫入該行數據
SELECT * FROM mytable WHERE …… FOR UPDATE;
選擇鎖的時候需要關注具體場景,如果是并發寫操作的話,一般使用表級鎖;如果是并發讀操作的話則使用行級鎖更合適。除此之外,還需要考慮鎖定時間,避免過長時間的鎖定導致系統崩潰或性能下降。
上一篇css十五種方法