樂觀鎖和悲觀鎖的區別

2021-08-29 18:50:38 字數 472 閱讀 2819

這裡假設有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...