日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MYSQL--事务隔离

發(fā)布時間:2024/7/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MYSQL--事务隔离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

你在銀行存了100元,現(xiàn)在你要把100元轉(zhuǎn)給用戶A,銀行一查你還有錢,開始給A轉(zhuǎn)錢,這時,轉(zhuǎn)錢給A的操作還未完成,你又把錢轉(zhuǎn)給B,銀行一看,你銀行賬號還有錢,就又給B轉(zhuǎn)錢。那亂套了....銀行血虧

所以把你轉(zhuǎn)給A,轉(zhuǎn)給B這兩件事分為兩個事務(wù)。

事務(wù)可以保證在事務(wù)中所有的數(shù)據(jù)庫操作要么全部成功,要么全部失敗。

事務(wù)的特性,即ACID(原子性,一致性,隔離性,持久性),這篇文章就來聊一聊隔離性。

多個事務(wù)同時執(zhí)行時,可能出現(xiàn)臟讀,不可重復(fù)讀,幻讀,為了解決這些問題,出現(xiàn)了“隔離級別”

SQL標(biāo)準(zhǔn)的隔離級別分為:讀未提交,讀提交,可重復(fù)讀,串行化

讀未提交:別人未提交,我也能看到

讀提交:別人提交了,我才能看到

可重復(fù)讀:別人提交了,我也不看

串行化:我沒改完,誰也看不見

在實現(xiàn)上,數(shù)據(jù)庫里面會創(chuàng)建一個視圖,訪問時以視圖的邏輯結(jié)果為準(zhǔn)。

在“可重復(fù)讀”隔離級別下,視圖在事務(wù)創(chuàng)建時建立,整個事務(wù)存在期間都用這個視圖。

在“讀提交”隔離級別下,視圖是在每個SQL語句開始執(zhí)行的時候開始創(chuàng)建的。

“讀未提交”隔離級別下,直接返回記錄上的最新值。

“串行化”隔離級別下,直接用加鎖的方式來避免并行訪問。

可重復(fù)讀的場景適用于哪些范圍?

比如你有一個賬戶余額表,一個賬單明細,你在對比看是否與本月賬單一致時一定不希望有新的交易發(fā)生影響你,這個時候用“可重復(fù)讀”,可以默認事務(wù)是靜態(tài)的

事務(wù)隔離 的實現(xiàn):

在MYSQL中,每條記錄在更新的時候都會同時記錄一條回滾操作。通過回滾操作,可以得到前一個狀態(tài)的值。

比如1+1,變?yōu)?,繼續(xù)2+1變?yōu)?,再3+1變?yōu)?

從4開始回滾,可以得到1,2,4幾個值,同一條記錄在系統(tǒng)中存在多個版本,這就是多版本并發(fā)控制(MVCC)

回滾日志也不能一直保留,什么時候刪除呢?

系統(tǒng)會判斷,當(dāng)沒有事務(wù)需要用到這些回滾日志時,回滾日志才刪除。

什么時候不需要呢?

當(dāng)系統(tǒng)里沒有比這個回滾日志更早的read-view的時候。

回滾段可能非常耗費資源,所以盡可能避免使用長事務(wù)

長事務(wù):長時間未提交的事務(wù)

事務(wù)的啟動方式:

1.顯示啟動事務(wù)語句,begin或者start transaction,配套的提交語句是commit,回滾語句是rollback

2. set autocommit=0,這個命令將自動提交關(guān)閉。意味著執(zhí)行SQL語句,事務(wù)啟動,不會自動提交。這個事務(wù)持續(xù)到你主動執(zhí)行

commit或者rollback語句,或者斷開連接。

有的框架建立連接后,會默認執(zhí)行 set autocommit=0,就導(dǎo)致了接下來的操作數(shù)據(jù)庫都在事務(wù)中,如果是長連接,就導(dǎo)致了長事務(wù)。

總結(jié)

以上是生活随笔為你收集整理的MYSQL--事务隔离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。