mysql 事務的四種隔離級別

2021-08-27 17:23:09 字數 2373 閱讀 6766

我們知道事務有四種特性

(1)原子性:乙個事務被視為不可分割的乙個單位

(2)隔離性:事務之間隔離開來,乙個事務所做的修改,未提交之前另乙個事務是不可見的

(3)永久性:事務的更改是永久的

(4)一致性:資料庫總是從乙個一致性的狀態轉換到另外乙個一致性的狀態中

在此之前,我們來學習一下mysql 如何設定隔離級別

select

@@global

.tx_isolation;

select

@@session

.tx_isolation;

select

@@tx_isolation;

set tx_isolation = 'read-uncommited';

設定預設隔離級別

1、預設:下乙個事務開始 2 3

、global:從此開始,全域性都是

隔離級別:

(1)read uncommited(讀未提交):發生髒讀

客戶端a

開始狀態:

客戶端b

2、客戶端a開始事務,但是沒有提交,客戶端b可以看到

1)、客戶端a的狀態:

客戶端b的狀態:

2)開始事務,並在客戶端改變值

3)這時候檢視客戶端b,可以看到變化,這就是髒讀現象

(2)read committed (讀提交):容易發生「不可重複讀」

1、首先先改變兩邊的狀態

客戶端a:

客戶端b:

2、客戶端a開始事務,客戶端b也開始事務

3、這時候a更新一條記錄,並且提交完畢,b未提交事務,又讀了一次,這時候,兩次讀的資料不一致,導致了不可重複讀

客戶端a

客戶端b:

簡單的來說

客戶端a

客戶端b

事務開始

事務開始

讀欄位name為lin

更新欄位name=qin

提交事務

讀欄位name為qin,兩次讀都不一致

提交事務

(3)repeatable read(可重複讀):幻讀現象

簡單的用**表示下:

客戶端a

客戶端b

事務開始

事務開始

讀name=lin

更新name=qin

commit提交事務

讀name還是為lin

事務2開始

插入一條資料

1、改變事務隔離級別

2、客戶端b改變並且提交

3、客戶端a兩次讀都未發生不可重複讀現象

4、客戶端b插入一條記錄(還未提交)

5、檢視客戶端a未發生變化,這時候客戶端b提交

6、再次檢視客戶端a的資料,還是沒有發生任何問題

所以mysql到了repeatable read級別之後,沒有出現任何問題

這是因為innodb儲存引擎通過mvcc(多版本控制)解決了幻讀的問題。

MySQL 四種事務隔離級別

mysql 事務都是指在 innodb 引擎下,myisam 引擎不支援事務。顯而易見,能夠讀取到,其他事務未提交的資料。既然其他事務未提交,就代表資料可能會回滾,這也意味著,可能讀取到的資料根本就不存在。特點 能讀取其它事務未提交的資料。存在事務問題 髒讀,不可重複讀,幻讀 這個隔離級別,只能讀取...

MySQL的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...

mysql的四種事務隔離級別

一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 co...