1. 程式人生 > >十:MYSQL中的事務

十:MYSQL中的事務

這一 zab 存儲引擎 隔離級別 事務 不可重復讀 table src commit

前言:

  因為沒有多少時間和精力,目前無法深入研究數據庫中的事務,比如

  但是,對於事務的一些基本知識,還是需要牢牢掌握的,做到了解事務的基本常識,在實際開發中能夠理解各個持久層框架對事務的處理

一:是麽是事務?

  下面是百度百科的結果

   技術分享圖片

    在開發中對於一個業務邏輯需要對數據進行的一系列CRUD操作,這一系列操作,我們可以把它稱為一個事務

    這樣理解事務就必須了解事務四大特性:原子性 、一致性、隔離性、持久性

二:事務的四大特性--ACID

  2.1:原子性

    在一個事務中對數據的所有操作,屬於一個單元,不可分割,只有成功或者失敗,不可能某個操作成功某個操作失敗

  2.2:一致性

    事務前後,數據的一致性,在既定規則下的事務處理過程中,必須嚴格按照既定規則操作數據,不可破壞規則

    維護數據的一致性任務應該由程序員來完成

    比如數據修改前為 10.00 修改完後變成了 5.5 滿足一致性應該為5.50(這是我自己的理解)

  2.3:隔離性

    體現在並發事務情況下,多個事務互相隔離,互不影響

  2.4:持久性

    在正確提交事務後,對數據的修改將是永久性的

三:事務的隔離級別

  體現在並發事務中的讀的操作

  事務有四個隔離級別:READ-UNCOMMITTED 、 READ COMMITTED、 REPEATABLE READ 、 SERIALIZABLE

  3.1:臟讀

    在事務A中讀取到事務B修改了但是未提交的數據

  3.2:不可重復讀

    解決了臟讀,但是在事務A中可以讀取到事務B提交後的數據(導致在事務A中多次執行相同的讀的操作的結果不同)

  3.3:可重復讀

    解決了不可重復讀,但是事務B在提交事務前後分別執行讀相同操作讀取數據,發現前後結果不一樣,好像之前讀到的數據是一個幻象

  3.4:串行化

四:事務的分類

  4.1:扁平事務(FLAT TRANSACTION)

  4.2:帶有保存點的扁平事務(FLAT TRANSACTION WITH SAVPOINTS)

  4.3:鏈式事務(Chained TRANSACTION)

  4.4:嵌套事務(Nested Transaction) InnoDB不支持

  4.5:分布式事務(Distributed Transaction)

五:MYSQL中的事務

  innoDB是MYSQL數據庫的默認存儲引擎,支持事務操作

  本來想自己親手測試一下,不同事務隔離級別對數據讀取的影響,想想還是算了吧,了解了就可以了

  MYSQL默認事務隔離級別是REPEATABLE READ---可重復讀

  

十:MYSQL中的事務