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...