mysql解決不可重復讀的方法:采用了mvcc多版本并發(fā)控制,mvcc是利用在每條數(shù)據后面加了隱藏的兩列,即創(chuàng)建版本號和刪除版本號,每個事務在開始的時候都會有一個遞增的版本號。
【相關學習推薦:mysql學習】
mysql解決不可重復讀的方法:
mysql中,默認的事務隔離級別是可重復讀(repeatable-read),為了解決不可重復讀,innodb采用了mvcc(多版本并發(fā)控制)來解決這一問題。
mvcc是利用在每條數(shù)據后面加了隱藏的兩列(創(chuàng)建版本號和刪除版本號),每個事務在開始的時候都會有一個遞增的版本號
新增:
insert?into?user?(id,name,age)values(1,"張三",10);
?
更新:
update?user?set?age?=?11?where?id?=?1;
更新操作采用delete+add的方式來實現(xiàn),首先將當前數(shù)據標志為刪除
?
然后新增一條新的數(shù)據:
?
刪除:刪除操作是直接將數(shù)據的刪除版本號更新為當前事務的版本號
delete?from?user?where?id?=?1;
查詢操作:
select?*?from?user?where?id?=?1;
查詢操作為了避免查詢到舊數(shù)據或已經被其他事務更改過的數(shù)據,需要滿足如下條件:
1、查詢時當前事務的版本號需要大于或等于創(chuàng)建版本號
2、查詢時當前事務的版本號需要小于刪除的版本號
即:create_version
這樣就可以避免查詢到其他事務修改的數(shù)據
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦