mysql怎么解決不可重復讀

mysql解決不可重復讀的方法:采用了mvcc多版本并發(fā)控制,mvcc是利用在每條數(shù)據后面加了隱藏的兩列,即創(chuàng)建版本號和刪除版本號,每個事務在開始的時候都會有一個遞增的版本號。

mysql怎么解決不可重復讀

【相關學習推薦:mysql學習

mysql解決不可重復讀的方法:

mysql中,默認的事務隔離級別是可重復讀(repeatable-read),為了解決不可重復讀,innodb采用了mvcc(多版本并發(fā)控制)來解決這一問題。

mvcc是利用在每條數(shù)據后面加了隱藏的兩列(創(chuàng)建版本號和刪除版本號),每個事務在開始的時候都會有一個遞增的版本號

新增:

insert?into?user?(id,name,age)values(1,"張三",10);

mysql怎么解決不可重復讀

?

更新:

update?user?set?age?=?11?where?id?=?1;

更新操作采用delete+add的方式來實現(xiàn),首先將當前數(shù)據標志為刪除

mysql怎么解決不可重復讀

?

然后新增一條新的數(shù)據:

mysql怎么解決不可重復讀

?

刪除:刪除操作是直接將數(shù)據的刪除版本號更新為當前事務的版本號

delete?from?user?where?id?=?1;

mysql怎么解決不可重復讀

查詢操作:

select?*?from?user?where?id?=?1;

查詢操作為了避免查詢到舊數(shù)據或已經被其他事務更改過的數(shù)據,需要滿足如下條件:

1、查詢時當前事務的版本號需要大于或等于創(chuàng)建版本號

2、查詢時當前事務的版本號需要小于刪除的版本號

即:create_version

這樣就可以避免查詢到其他事務修改的數(shù)據

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享