MySQL事物管理

sql語句對數據庫操做構成事物。sql

事物的特性:ACID數據庫

•Atomicity(原子性):一個事物要麼全都被執行,要麼全都不執行,不會存在執行結束在中間環節。若是事物在執行過程當中發生異常,則會回滾到事物執行以前的狀態。能夠簡單認爲"同生共死"。併發

•Consistency(一致性):在事物開始以前和事物結束以後,數據庫的完整性沒有被破壞,操做符合預期。spa

•Isolation(隔離性):同一時間,只容許一個事物請求同一數據。同一時間多個用戶併發訪問數據庫時,數據庫爲每個用戶開啓一個事物,不一樣事物之間彼此互相隔離。ci

•Durability(持久性):一個事物一旦被提交,那麼對數據庫中數據的影響是永久的,即便數據庫遇到故障也不會改變事物對數據庫的操做。it

對於事物,若是不考慮隔離級別,則會出現問題:io

1.髒讀table

  對於事物A和B,事物A讀取了B未提交的數據,事物B遇到異常進行了回滾操做,那麼就會產生髒讀。sql語句

2.不可重複讀序列化

  事物A屢次對同一數據進行讀取,在讀取過程當中事物B對數據進行屢次修改,致使事物A每次讀取的數據都不一致(側重於修改)。

3.幻讀

  事物A對數據進行了修改,事物B進行了插入或刪除操做,事物A操做結束之後發現仍舊存在未被修改的數據,彷彿幻覺同樣,稱之爲幻讀(側重於新增或刪除)。

數據庫提供四種隔離級別:

事物隔離級別 髒讀 不可重複讀 幻讀
讀未提交
讀已提交
可重複讀
序列化

 

1.讀未提交(Read Uncommitted)

  能夠讀取到未被提交的數據

2.讀已提交(Read Committed)

  能夠讀取已經提交的數據

3.可重複讀(Repeatable Read)

  在數據讀取以後加鎖,明確數據讀取是爲了更新,不容許其餘事物進行修改,相似讀取數據以後事物不結束,其餘事物沒法操做。

4.序列化(Serializable)

  對於一個事物,必須執行完該事物的全部子事物才能夠執行其餘的事物 。

隔離級別:序列化>可重複讀>讀已提交>讀未提交

相關文章
相關標籤/搜索