MySQL多版本并發(fā)控制MVCC的實(shí)現(xiàn)示例代碼介紹
主要介紹了mysql多版本并發(fā)控制MVCC的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。事務(wù)隔...
主要介紹了MySQL多版本并發(fā)控制MVCC的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
事務(wù)隔離級(jí)別設(shè)置
set global transaction isolation level read committed; //全局的
set session transaction isolation level read committed; //當(dāng)前會(huì)話
修改事務(wù)提交方式(是否自動(dòng)提交,mysql默認(rèn)自動(dòng)提交)
SET AUTOCOMMIT = 1; //自動(dòng)提交,為0手動(dòng)提交
不同數(shù)據(jù)庫(kù)引擎MVCC模式各不相同,典型有樂(lè)觀和悲觀并發(fā)控制。
innodb
說(shuō)明:
InnoDB的MVCC,是通過(guò)在每行記錄后面保存兩個(gè)隱藏的列來(lái)實(shí)現(xiàn)的。這兩個(gè)列,一個(gè)保存了行的創(chuàng)建時(shí)間,一個(gè)保存行的過(guò)期時(shí)間(或刪除時(shí)間)。當(dāng)然存儲(chǔ)的并不是實(shí)際的時(shí)間值,而是系統(tǒng)版本號(hào)(system version number).每開(kāi)始個(gè)新的事務(wù),系統(tǒng)版本號(hào)都會(huì)自動(dòng)遞增。事務(wù)開(kāi)始時(shí)刻的系統(tǒng)版本號(hào)會(huì)作為事務(wù)的版本號(hào),用來(lái)和查詢到的
SELECT
InnoDB會(huì)根據(jù)以下兩個(gè)條件檢查每行記錄:
a. InnoDB只查找版本早于當(dāng)前事務(wù)版本的數(shù)據(jù)行(也就是,行的系統(tǒng)版本號(hào)小于或等于事務(wù)的系統(tǒng)版本號(hào)),這樣可以確保事務(wù)讀取的行,要么是在事務(wù)開(kāi)始前已經(jīng)存在的,要么是事務(wù)自身插人或者修改過(guò)的。
b.行的刪除版本要么未定義,要么大于當(dāng)前事務(wù)版本號(hào)。這可以確保事務(wù)讀取到的行,在事務(wù)開(kāi)始之前未被刪除。
只有符合上述兩個(gè)條件的記錄,才能返回作為查詢結(jié)果。
INSERT
InnoDB為新插人的每行 保存當(dāng)前系統(tǒng)版本號(hào)作為行版本號(hào)。
DELETE
InnoDB為刪除的每行保存當(dāng)前系統(tǒng)版本號(hào)作為行刪除標(biāo)識(shí)。
UPDATE
InnoDB為插人行新記錄,保存當(dāng)前系統(tǒng)版本號(hào)作為行版本號(hào),同時(shí)保存當(dāng)前系統(tǒng)版本號(hào)到原來(lái)的行作為行刪除標(biāo)識(shí)。
注意:
MVCC只在REPEATABLE READ 和READ COMMITED 兩個(gè)隔離級(jí)別下工作。其他兩個(gè)隔離級(jí)別都和MVCC不兼容法,因?yàn)镽EAD UNCOMITTED總是讀取最新的數(shù)據(jù)行,而不是符合當(dāng)前事務(wù)版本的數(shù)據(jù)行。而SERIALIZABLE則會(huì)對(duì)所有讀取的行都加鎖。
查看當(dāng)表的狀態(tài)
show table status like 'task'\G;
不可重復(fù)讀:實(shí)現(xiàn)了事務(wù)的隔離性,但兩次讀取同一條數(shù)據(jù)的時(shí)候發(fā)現(xiàn)數(shù)據(jù)不一致了。臟讀、不可重復(fù)讀、幻讀
臟讀:當(dāng)前事務(wù)讀到了另一個(gè)事務(wù)未提交的狀態(tài),事務(wù)沒(méi)有實(shí)現(xiàn)隔離。
幻讀:兩次查詢同一批數(shù)據(jù),發(fā)現(xiàn)有新數(shù)據(jù)被插入,主要是因?yàn)橹型居衅渌聞?wù)對(duì)數(shù)據(jù)集進(jìn)行了插入操作。(加了間隙鎖解決該問(wèn)題)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,
- mysql group_concat 實(shí)現(xiàn)把分組字段寫(xiě)成一行的方法
- mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)、子查詢統(tǒng)計(jì)示例
- MySQL InnoDB數(shù)據(jù)庫(kù)如何保證事務(wù)特性示例詳解
- 數(shù)據(jù)庫(kù) MySQL8.0+常用命令及操作命令詳解
- Mysql8.0.17數(shù)據(jù)庫(kù)安裝圖文教程
- SQL Server 2000/2005/2008刪除或壓縮數(shù)據(jù)庫(kù)日志的方
- SQL Server數(shù)據(jù)庫(kù)查看login所授予的具體權(quán)限問(wèn)題
- SQL Server數(shù)據(jù)庫(kù)怎么找出一個(gè)表包含的頁(yè)信息(Page)
- Windows server 2016服務(wù)器上安裝oracle數(shù)據(jù)庫(kù)的教程
- SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)
mysql group_concat 實(shí)現(xiàn)把分組字段寫(xiě)成一行的方法
文章主要介紹了mysql group_concat實(shí)現(xiàn)把分組字段寫(xiě)成一行的方法,結(jié)合實(shí)例形式分析了group_concat函數(shù)的功能、查詢用法及相關(guān)操作技巧,需要的朋友可以參考下。本文實(shí)例講述...
mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)、子查詢統(tǒng)計(jì)示例
文章主要介紹了mysql實(shí)現(xiàn)多表關(guān)聯(lián)統(tǒng)計(jì)(子查詢統(tǒng)計(jì)),結(jié)合具體案例形式分析了mysql多表關(guān)聯(lián)統(tǒng)計(jì)的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下。本文實(shí)例講述了my...
MySQL InnoDB數(shù)據(jù)庫(kù)如何保證事務(wù)特性示例詳解
文章主要給大家介紹了關(guān)于MySQL InnoDB如何保證事務(wù)特性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起...
數(shù)據(jù)庫(kù) MySQL8.0+常用命令及操作命令詳解
文章主要介紹了MySQL8.0+常用命令及操作命令,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下。開(kāi)啟遠(yuǎn)程訪問(wèn)通過(guò)以下命令開(kāi)啟root用戶遠(yuǎn)程訪問(wèn)權(quán)限:CREATE USER 'root'...
Mysql8.0.17數(shù)據(jù)庫(kù)安裝圖文教程
本文通過(guò)圖文并茂的形式給大家介紹了Mysql8.0.17安裝,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...
SQL Server 2000/2005/2008刪除或壓縮數(shù)據(jù)庫(kù)日志的方法
最近win2008 r2的服務(wù)器比較卡,打開(kāi)服務(wù)器顯示也特別慢,sqlserver業(yè)務(wù)費(fèi)正常執(zhí)行,服務(wù)器桌面操作也比較卡,經(jīng)過(guò)多方研究發(fā)現(xiàn)原來(lái)是sqlserver日志文件已經(jīng)達(dá)到了84G導(dǎo)致,這里就為大家分享一下解決方法,需要的朋友可以參考一下...
SQL Server數(shù)據(jù)庫(kù)查看login所授予的具體權(quán)限問(wèn)題
在SQL Server數(shù)據(jù)庫(kù)中如何查看一個(gè)登錄名(login)的具體權(quán)限呢,下面腳本之家小編給大家?guī)?lái)了SQL Server查看login所授予的具體權(quán)限問(wèn)題,感興趣的朋友一起看看吧...
SQL Server數(shù)據(jù)庫(kù)怎么找出一個(gè)表包含的頁(yè)信息(Page)
文章主要給大家介紹了關(guān)于SQL Server是如何找出一個(gè)表包含的頁(yè)信息(Page)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價(jià)值,...
Windows server 2016服務(wù)器上安裝oracle數(shù)據(jù)庫(kù)的教程圖解
文章主要介紹了Windows server 2016 安裝oracle的教程圖解,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 1.安裝oracle Oracle的安...
SQL Server數(shù)據(jù)庫(kù)基礎(chǔ)之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)
文章主要給大家介紹了關(guān)于SQL Server基礎(chǔ)之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們...