悲觀鎖是對數據被的修改持悲觀態度(認爲數據在被修改的時候必定會存在併發問題),所以在整個數據處理過程當中將數據鎖定。悲觀鎖的實現,每每依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,不然,即便在應用層中實現了加鎖機制,也沒法保證外部系統不會修改數據) sql
-- 第一個客戶端 START TRANSACTION; SELECT * FROM montauban_wish WHERE id = 7 FOR UPDATE; UPDATE montauban_wish SET content = 'nihao' WHERE id = 7; -- COMMIT
-- 第二個客戶端 START TRANSACTION; select * from montauban_wish where id = 7 for update; update montauban_wish set content = 'nihao' where id = 7; COMMIT
若是第一個客戶端不提交,第二個客戶端永遠處於等待狀態。數據庫
沒有指定主鍵或者主鍵不明確———表鎖
指定了主鍵,可是沒有數據————不鎖併發