MySQL數據庫事務以及事務隔離級別

數據庫事務以及事務隔離級別

MySQL數據庫事務

數據庫事務( transaction)是訪問並可能操作各種數據項的一個數據庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部數據庫操作組成。

事務的特性

事務特性有四個:
原子性:就是說一個事務要麼執行成功,要麼執行失敗。
一致性:事務中的數據要保持一致,要從一個狀態轉變爲另一個狀態。
隔離性:事物之間相互獨立,互不干擾。
持久性:一般保存的數據保存在硬盤上,就算是停電數據庫關閉,數據都不會丟失。

事務的隔離級別

事務的隔離級別主要說的就是事務的隔離性

不使用事務的隔離級別就會出現什麼情況

一、髒讀
就是事務1訪問到事務2的中間數據,比如就是事務2就是把一個數字進行兩次i++操作,但是事務1訪問的數據本應該是,兩次i++之後的值,但是事務1訪問的第一次i++之後的值,將第一次i++之後讀取的數據稱爲髒讀。主要就是查詢操作

二、不可重複讀
就是事務1在讀取數據時,第一次讀取的數據和第二次讀取的數據不一致,就是事務1兩次讀取數據的期間,數據被另一個事務修改了,以至於事務1第二次讀取的數據是事務2修改後的值,所以導致了數據兩次讀取的數據不一致的結果。

三、幻讀
就是事務1進行多次讀取時,第一次讀取沒有數據,第二次讀取的時候有數據的結果,也是因爲在兩次讀取期間,其他事務進行的插入操作,以至於事務1第二次讀取的數據是其他事務插入或者刪除後的值,所以導致了數據兩次讀取的數據不一致的結果。

從而引出了事務的隔離級別

事務的隔離級別

一、未提交讀:就是可以讀到未提交的數據,在這種隔離級別下,查詢不會進行加鎖,這是最低級的隔離級別,可能會發生髒讀,不可重複讀,幻讀的情況。

二、已提交讀:就是隻能讀到事務提交後的數據,SQL Server和Oracle默認的隔離級別,這種隔離級別解決了髒讀的問題,但是並不能解決不可重複讀和幻讀的問題。

三、可重複讀:專門解決“不可重複讀的"這一情況而制定的,解決了不可重複讀這一情況,是MySQL數據庫默認的隔離級別。

四、串行化:這是數據庫最高的隔離級別,就是事務串行化的進行執行,就是一個一個排隊進行執行事務,這個有效的解決了髒讀,不可重複讀,幻讀的情況。

看一下張圖,可以看出事務的隔離級別解決的問題
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章