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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MYSQL--事务隔离

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

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

所以把你轉給A,轉給B這兩件事分為兩個事務。

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

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

多個事務同時執行時,可能出現臟讀,不可重復讀,幻讀,為了解決這些問題,出現了“隔離級別”

SQL標準的隔離級別分為:讀未提交,讀提交,可重復讀,串行化

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

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

可重復讀:別人提交了,我也不看

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

在實現上,數據庫里面會創建一個視圖,訪問時以視圖的邏輯結果為準。

在“可重復讀”隔離級別下,視圖在事務創建時建立,整個事務存在期間都用這個視圖。

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

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

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

可重復讀的場景適用于哪些范圍?

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

事務隔離 的實現:

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

比如1+1,變為2,繼續2+1變為3,再3+1變為4

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

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

系統會判斷,當沒有事務需要用到這些回滾日志時,回滾日志才刪除。

什么時候不需要呢?

當系統里沒有比這個回滾日志更早的read-view的時候。

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

長事務:長時間未提交的事務

事務的啟動方式:

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

2. set autocommit=0,這個命令將自動提交關閉。意味著執行SQL語句,事務啟動,不會自動提交。這個事務持續到你主動執行

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

有的框架建立連接后,會默認執行 set autocommit=0,就導致了接下來的操作數據庫都在事務中,如果是長連接,就導致了長事務。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。