文章出處:
只有innodb引擎支援事務,下邊的內容均以innodb引擎為預設條件
1、髒讀
2、不可重複讀
3、幻讀
1、讀未提交(read uncommitted)
可能產生髒讀、不可重複讀、幻讀
2、讀已提交(read committed)
避免了髒讀,可能產生不可重複讀、幻讀
3、可重複讀(repeatable read)(mysql預設隔離級別)
避免了髒讀,不可重複讀。通過區間鎖技術避免了幻讀
4、序列化(serializable)
序列化可以避免所有可能出現的併發異常,但是會極大的降低系統的併發處理能力
1、undo日誌
undo日誌用於存放資料修改被修改前的值
undo log中分為兩種型別,一種是 insert_undo(insert操作),記錄插入的唯一鍵值;
一種是 update_undo(包含update及delete操作),記錄修改的唯一鍵值以及old column記錄。
2、redo日誌
mysql會將乙個事務中的所有sq先l記錄到redo log中,然後再將記錄從redo log同步到資料檔案中
它可以帶來這些好處:
當buffer pool中的dirty page 還沒有重新整理到磁碟的時候,發生crash,啟動服務後,可通過redo log 找到需要重新重新整理到磁碟檔案的記錄;
buffer pool中的資料直接flush到disk file,是乙個隨機io,效率較差,而把buffer pool中的資料記錄到redo log,是乙個順序io,可以提高事務提交的速度;
3、binlog日誌
用於資料庫主從複製的記錄,是二進位制格式。在事務提交之後進行乙個磁碟寫入。
這裡注意下redo log 跟binary log 的區別,redo log 是儲存引擎層產生的,而binary log是資料庫層產生的。假設乙個大事務,對tba做10萬行的記錄插入,在這個過程中,一直不斷的往redo log順序記錄,而binary log不會記錄,直到這個事務提交,才會一次寫入到binary log檔案中
1、預設情況下,開啟事務自動提交功能。每執行乙個sql,都會對應乙個事務的提交
2、spring會將底層連線的自動提交特性設定為false。使用手動提交
1、原子性(atomicity)
事務中的所有操作作為乙個整體像原子一樣不可分割,要麼全部成功,要麼全部失敗。
2、一致性(consistency)
事務的執行結果必須使資料庫從乙個一致性狀態到另乙個一致性狀態。一致性狀態是指:1.系統的狀態滿足資料的完整性約束(主碼,參照完整性,check約束等) 2.系統的狀態反應資料庫本應描述的現實世界的真實狀態,比如轉賬前後兩個賬戶的金額總和應該保持不變。
3、隔離性(isolation)
併發執行的事務不會相互影響,其對資料庫的影響和它們序列執行時一樣。比如多個使用者同時往乙個賬戶轉賬,最後賬戶的結果應該和他們按先後次序轉賬的結果一樣。
4、永續性(durability)
事務一旦提交,其對資料庫的更新就是持久的。任何事務或系統故障都不會導致資料丟失。
5、redo log和undo log實現了原子性、一致性、永續性
6、鎖機制實現了隔離性
鎖機制原理分析:
mysql資料庫事務
維基百科 事務是資料庫管理系統 dbms 執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。只有innodb和ndb 1 原子性 atomicity 事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼全部不執行。2 一致性 consistency 幾個並行執行的事務,其執行結果必須與...
mysql資料庫事務
原子性 乙個事務 transaction 中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節 一致性 在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞 隔離性 資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致...
Mysql資料庫事務 備忘
一.設定mysql的事務級別 1 my.ini檔案中 read uncommitted,read committed,repeatable read,serializable transaction isolation read committed 2 啟動引數指定 mysqld transacti...