MySQL事物的相關(guān)理解

在MySQL中可以使用InnoDB的引擎開啟事物,保證數(shù)據(jù)的操作完整。

提到事物,肯定有ACID,即原子性、一致性、隔離性、持久性。

關(guān)于數(shù)據(jù)隔離級(jí)別包括:讀未提交、讀已提交、可重復(fù)讀、串行化。

讀未提交(read uncommitted)是指一個(gè)事物還沒(méi)有提交時(shí),它做的變更后的數(shù)據(jù)可以被其他事務(wù)查詢到。

讀已提交(read committed)是指一個(gè)事務(wù)提交之后,它做的變更后數(shù)據(jù)才會(huì)被其他事務(wù)查詢到。

可重復(fù)讀(repeatable read)是指一個(gè)事務(wù)執(zhí)行過(guò)程中可以查詢到的數(shù)據(jù),和事務(wù)一開始啟動(dòng)時(shí)查詢的數(shù)據(jù)保持一致。

串行化(serializable)是指在一個(gè)事務(wù)操作數(shù)據(jù)時(shí),無(wú)論時(shí)讀還是寫都會(huì)加鎖,其他事務(wù)不可操作當(dāng)前數(shù)據(jù),必須等待當(dāng)前事務(wù)完成,才可以執(zhí)行。

事務(wù)隔離級(jí)別的實(shí)現(xiàn)

在MySQL中,所有的數(shù)據(jù)記錄在更新的時(shí)候都會(huì)同時(shí)記錄一條回滾操作,記錄上的最新值,通過(guò)回滾操作,都可以得到前一個(gè)狀態(tài)的值?;貪L日志在系統(tǒng)判斷當(dāng)沒(méi)有事務(wù)需要用到當(dāng)前回滾日志時(shí),將會(huì)刪除當(dāng)前回滾日志。所以說(shuō)盡量不要使用長(zhǎng)事務(wù)。長(zhǎng)事務(wù)意味這系統(tǒng)中存在很老的事務(wù)視圖,由于這些事務(wù)隨時(shí)都有可能被用到,所以大量的回滾日志并不會(huì)被刪除,會(huì)導(dǎo)致占用大量存儲(chǔ)空間。

事務(wù)的啟動(dòng)

[if !supportLists]1.[endif]顯示啟動(dòng)事務(wù)

Begin或 start transaction;提交事務(wù)commit 回滾事務(wù)rollback

[if !supportLists]2.[endif]Set autocommit = 0,這個(gè)命令會(huì)將這個(gè)線程的自動(dòng)提交關(guān)閉,如果當(dāng)前線程運(yùn)行select語(yǔ)句后,就會(huì)啟動(dòng)事務(wù),并且不會(huì)自動(dòng)提交,事務(wù)一直存在直到斷開連接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容