這裡假設有a和b兩個人操作乙個資料庫表,該錶目前的count欄位=100,version=1
(1)a此時操作該錶,獲得version=1,並準備將當前的count-50
select version from user
update user set count=count-50,version=version+1 where version=#
(3)a隨後執行count-50的操作時,會判斷當前版本是否為1,因為b修改了該錶,版本號變為了2,所以a的操作執行不成功,這樣就避免的a的操作把b的操作覆蓋的可能。
select * from a where id=1 for update
-- 在操作a時,對id=1的行加上行級鎖,其他事務無法操作該資料.實現了悲觀鎖.
-- 悲觀鎖併發度低,每次都需要對錶上鎖,但是能夠保證資料的安全.
樂觀鎖和悲觀鎖的區別
悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...
樂觀鎖和悲觀鎖的區別
來自 悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 op...
樂觀鎖和悲觀鎖的區別
悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...