MySQL 共享鎖和排他鎖
MySQL 的共享鎖和排他鎖都屬於悲觀鎖(參考:樂觀鎖和悲觀鎖)
共享鎖
共享鎖又稱讀鎖,簡稱 S 鎖,多個事務可以同時爲同一數據加共享鎖。數據被添加共享鎖後可以被多個事務同時讀取,但是無法被修改。
MySQL 共享鎖實現:
SELECT ... LOCK IN SHARE MODE
排他鎖
排他鎖又稱寫鎖,簡稱 X 鎖,排他鎖不能與其它鎖共存,一旦一個事務獲取了某一數據的排他鎖,則其它任何事務都無法再獲取該數據的其它鎖,包括共享鎖和排他鎖。只有獲取到排他鎖的事務本身可以對該數據執行讀取和修改操作。
MySQL 排他鎖實現:
SELECT ... FOR UPDATE
MySQL InnoDB 存儲引擎會自動爲 INSERT
、UPDATE
、DELETE
操作涉及的數據添加排他鎖,SELECT
默認不添加任何鎖。