高效能mysql之事務的理解

2021-08-13 23:36:19 字數 1594 閱讀 9641

acid只的是原子性,永續性,隔離性,永續性

原子性,

概念理解 : 事務代表的最小的執行單元,事務中操作要麼同時發生,要麼同時不發生,不會出現有些發生有些不發生的情況,

例子 : 銀行轉賬,a賬戶轉賬到給b賬戶轉賬100,事務中的操作分兩步, a賬戶減100,b賬戶加100, 這兩步必定同時成功或失敗

一致性概念理解 : 事務完成前後,事務必須從同乙個一致性變到另乙個一致性,

例子 : 銀行轉賬 , 賬戶a和賬戶b 互相轉賬 , 轉賬前總額1000 轉賬後總額也一定是 1000 , 這個在分布式系統中比較重要 ,

另乙個例子 : 初始值為a = 0 有100 個事務, 每個事務中操作為 a++ ,則全部事務結束後 值為100 , 這也是一致性的一種體現,

隔離性概念理解 : 兩個事務互不影響

例子 : 銀行轉賬, 事務甲 賬戶a給賬戶b轉賬, 事務乙 賬戶b 給賬戶c 轉賬, 事務甲成功與否都不會影響事務乙

永續性概念理解 : 事務完成後, 其結果將被永久的保留

例子 : 銀行轉賬, 賬戶a 給賬戶b 轉賬100 轉賬完成後, 其結果不會改變 , 這個比較理解,

acid是對資料庫的要求, 但並不是每個資料庫系統都會具備這些特性, 因為有效能的要求, 有些問題是可以容忍的, 但是有些問題要堅決避免, 下面對資料庫關於事務的一些問題進行說明

髒讀概念理解 : 乙個事務讀取到了另乙個事務未提交的資料

例子 : 銀行轉賬,  事務甲 , 賬戶a給賬戶b 轉賬100 ,事務乙  b 檢視自己的賬戶, 如果 事務甲為未提交的狀態, 事務乙 顯示了事務甲的資料, 即 賬戶b 上多了100 , b 以為錢已經到賬了, 此時 事務甲回退, 事務甲失敗, 轉賬未成功, 則b 蒙受損失

注意 : 髒讀是要嚴格避免的

不可重複讀

概念理解 : 乙個事務多次查詢操作,得到的資料(資料內容)不一致, 則為不可重複讀

例子 : 檢視餘額, 事務甲開啟, 發現餘額為100 此時事務未提交, 過了幾秒, 再次檢視餘額, 發現餘額為 200 , 兩次檢視餘額的數值不一致, 這就是不可重複讀 ,

另乙個例子 : 事務甲為檢視資料庫中所有使用者, 發現兩次查詢時, 得到的資料發生了變化,

幻讀概念理解 : 乙個事務多次查詢操作,得到的資料(條數)不一致, 則為幻讀

例子 : 檢視銀行交易記錄 , 事務兩次查詢, 發現第二次查詢比第一次查詢多了一條記錄, 則為幻讀 ;

更新丟失

概念理解 : 兩個事務同時更新操作, 其中乙個事務把另乙個已經提交的事務的資料覆蓋了 , 則發生了更新丟失 , 更新丟失也是要嚴格避免的

例子 : 銀行轉賬 , 事務甲, 賬戶a 給賬戶b 轉賬100  , 事務乙, 賬戶c 給賬戶b 轉賬200 , 事務甲提交後, 事務乙提交, 此時 賬戶b 上只多了 200 , 此時發生更新丟失, 事務乙把事務甲的資料覆蓋了 ,

mysql的隔離級別

有四種,

讀未提交, 什麼都解決不了, 最不安全, 效率最高, 禁止使用,

不可重複讀, 可以解決髒讀, 效率比較高,

可重複讀,  可以解決不可重複讀, mysql預設隔離級別,  解決方式就是行鎖,

序列化, 什麼都能解決, 但是效率底下, 沒有併發量, 解決幻讀需要表鎖,或間隙鎖,

《高效能MySQL》閱讀 MySQL中的事務

20210107 22 00 23 00 承接 高效能mysql 閱讀 mysql架構和歷史 一 一頁書 詩號 世事如棋,乾坤莫測,笑盡英雄啊!9.mysql中的事務 1.mysql中提供了兩種事務型擎innodb和ndbcluster,2.mysql預設是自動提交事務的,就是如果不是顯示的開始乙個...

高效能Mysql 事務特性及實戰

事務的作用我就不再提及了,相信看到這篇文章的基本上都會知道事務的概念。本篇文章首先會介紹一下事務的特性 四種隔離級別以及對應的實戰測試,希望幫讀者加深事務的理解。隔離級別 髒讀可能 不可重複讀 幻讀ru yesyes yesrc noyes yesrr nono yesserialize nonon...

MYSQL之事務篇

在引入事務之前我們先考慮銀行轉賬的操作 從id 1的賬戶給id 2的賬戶轉賬100元 第一步 將id 1的a賬戶餘額減去100 update accounts set balance balance 100where id 1 第二步 將id 2的b賬戶餘額加上100 update accounts...