一、事務的基本元素
(1)原子性(atomicity):事務開始後,要麼全做完,要麼都不做。
(2)一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞,比如a向b轉賬,不可能a扣了錢,b卻沒收到。
(3)隔離性(isolation):多個併發事務之間相互隔離。對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。
(4)永續性(durability):事務一旦被提交,對資料庫中資料的改變就是持久的。
二、事務的隔離性
1.髒讀:事務讀取到另乙個事務未提交的資料。
2.不可重複讀:乙個事務多次查詢到的資料不同。(針對的是update或delete)
3.幻讀:讀取到另乙個事務插入的資料。a將所有學生的成績從具體分數改為abcde等級,但是b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣。(針對的是insert)
4.一定會產生幻讀嗎,怎麼解決?
(1)使用mvcc+間隙鎖(grap鎖與行鎖)
(2)innodb的預設事務隔離級別是rr(可重複讀)。innodb的預設事務隔離級別是rr(可重複讀)。它的實現技術是mvcc。基於版本的控制協議。但是防止的是快照讀。
基於innodb的mvcc實現原理:通過在每行記錄後面儲存兩個隱藏的列實現。這兩個列,乙個儲存了行的建立時間,乙個儲存行的過期時間(或刪除時間)。當然儲存的並不是實際的時間值,而是系統版本號(systemversionnumber)。每開始乙個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。
5.快照讀和當前讀的區別
(1)快照讀:也就是讀取的資料雖然是一致的,但是資料是歷史資料。(普通的select)
(2)當前讀:讀取的是最新版本,update、delete、insert、select … lock in share mode、select … for update
(3) 詳解基於select … for update實現mysql悲觀鎖
三、mysql事務隔離級別
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...
Mysql 事務隔離級別
mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...