樂觀鎖和悲觀鎖的區別

2021-08-20 08:14:32 字數 1099 閱讀 3797

1.讀取:事務將資料讀入快取,這時系統會給事件分派乙個時間戳。2. 

校驗:事務執行完畢後,進行提交。這時同步校驗所有事務,如果事務所讀取的資料在讀取之後又被其他事務修改,則產生衝突,事務被中斷回滾 

1.查詢出商品資訊

select (status,status,version) from t_goods where id=#

2.根據商品資訊生成訂單

3.修改商品status為2

update t_goods

set status=2,version=version+1

where id=# and version=#;

mysql的預設使用自動提交模式

,也就是說,當你執行乙個更新操作後,mysql的會立刻將結果進行提交。

set autocommit=0;

#0.開始事務

begin;/begin

work;/start

transaction; (三者選一就可以)

#1.查詢出商品資訊

select status from t_goods where id=1

forupdate;

#2.根據商品資訊生成訂單

insert

into t_orders (id,goods_id) values (null,1);

#3.修改商品status為2

update t_goods set status=2;

#4.提交事務

commit;/commit

work;

select ... for update

的方式,這樣就可以通過開啟排他鎖的方式實現了悲觀鎖。此時在t_goods表中,id為1的那條資料就被我們鎖定了,的事務必須等本次事務提交之後才能執行

。這樣我們可以保證當前的資料不會被其它事務修改

。mysql innodb預設行級鎖

。行級鎖都是基於索引的,如果一條sql語句用不到是不會使用行級鎖的,會使用表級鎖把整張表鎖住

,這點需要注意。

樂觀鎖和悲觀鎖的區別

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...

樂觀鎖和悲觀鎖的區別

來自 悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 op...

樂觀鎖和悲觀鎖的區別

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...