關於MySQL 事物 總結

什麼是事物

事務(Transaction)是數據庫區別於文件系統的重要特性之一。 sql

數據庫引入事務的主要目的:事務會把數據庫從一種抑制狀態轉換爲另外一種一致狀態。在數據庫提交工做時,這種機制可以保證在一組的sql語句要麼都成功執行、要麼都不執行。數據庫

事務的基本要素(ACID)

事務用來保證數據庫的完整性性能

  • 原子性(atomicity):事務中全部操做要麼所有成功,要麼所有失敗
  • 一致性(consistency):從一種狀態轉變爲下一種一致狀態。事務開始前和結束後,數據庫的完整性約束沒有被破壞。
  • 隔離性(isolation):一個事務的影響在提交前對其餘事務都不可見
  • 持久性(Durability):一旦提交,結果就是永久性的。

InnoDB中的事務徹底符合ACID的特性atom

數據庫事務的隔離級別

數據庫事務的隔離級別有4種,由低到高分別是:spa

  • 未提交讀(Read uncommitted
  • 已提交讀(read committed
  • 可重複讀(repeatable read
  • 可串行化(Serializable

image.png

未提交 讀(Read uncommitted

容許髒讀,就是一個事務能夠讀取另外一個未提交事務的數據。code

eg:對象

老闆要給員工發工資,員工的工資是3000/月。可是發工資時老闆不當心按錯了數字,按成5000/月,可是該事務尚未提交,就在這時,員工去查看本身這個月的工資,發現(5000)比往常多了2千元,覺得漲工資了很是高興。

已提交讀(read committed

只能讀取到已經提交的數據(就是事務要等另外一個事物提交後才能讀取數據)
eg:blog

小明拿着工資卡去超市購物(卡里固然是隻有3000),當他賣單時(事務開啓),收費系統事先檢測到他的卡里有3000,就在這個時候!!小明的對象把卡里的錢所有轉了出去,並提交事物(提交完成)。當收費系統準備扣款時,再檢測卡里的金額,發現已經沒錢了。

可重複讀(repeatable read

就是在開始讀取數據(事物開啓)時,再也不容許修改操做。事務

eg:ci

小明拿着工資卡去超市購物(卡里固然是隻有3000),當他賣單時(事務開啓,不容許其餘事務的UPDATE修改操做),收費系統事先檢測到他的卡里有3000。這個時候任何人不能轉出金額了。接下來收費系統就能夠扣款了。

可串行化(Serializable

最高的事務隔離級別,在該級別下,事務串行化順序執行,讀寫相互都會阻塞。可是這種事務隔離級別效率低下,比較耗數據庫性能,通常不用。

eg:

小明拿着工資卡去ATM機(卡里固然是隻有3000),當他取錢時(事務開啓),ATM查詢到他的卡里有3000。這個時候在向卡里存200。此時 只有當查的事物完成時,存的事物纔會執行。

總結

簡單來講: 事物就是在數據庫提交工做時,要麼全部修改都保存,要麼全部修改都不保存。

相關文章
相關標籤/搜索