事務,事務的髒讀 幻讀 不可重複讀與事務的隔離級別

2021-08-17 04:17:49 字數 1554 閱讀 5050

事務:指作為邏輯工作單元執行的一系列操作,要麼全部執行,要麼全部不執行。在資料庫中體現在,一條sql語句或一組sql語句,這些sql語句要麼全部都執行,要麼全部不執行。

例:銀行取錢:a賬戶上存款10000,現取款1000,取款後a賬戶存款為9000。a取款1000就是事務。

原子性(atomicity):事務作為乙個整體被執行,其中的操作要麼全部執行,要麼全部不執行 。

例:a取款1000,取款機未發生錯誤,正常取款,a賬戶存款變成9000。a取款1000,取款機發生錯誤,a賬戶存款仍為10000。

一致性(consistency):事務操作前後,資料庫保持一致性狀態。資料庫中資料需要保持完整性約束,既實體完整性、域完整性、參照完整性、使用者自定義的完整性 。

例:a取款前,存款+a現金為10000,a取款後,存款+a現金為10000。

隔離性(isolation):多個事務併發操作時,事務之間互不影響。

例:a對a賬戶取款1000,b同時對a賬戶取款1000,a賬戶存款8000。而不會出現兩次取款,取的是同1000的情況。

永續性(durability):事務提交後,對資料的操作永久存在。

例:a取款1000後,在不訪問款情況下,存款永久為9000。

髒讀:乙個事務正在訪問資料,並且對資料進行了修改,但是修改還未提交。此時另一條事務也訪問了該資料,並且使用了資料。

例: 1.資料x=100,事務a訪問資料x並且執行事務(x=x+10),但是還未提交,此時x=110;

2.事務b訪問資料x=110,並且使用了資料x;

3.事務a執行錯誤,執行回滾,資料x=100;

事務b訪問到的資料x=110,既為髒資料。

不可重複讀:乙個事務多次讀取同乙個資料。在第乙個事務還未結束時,另乙個事務訪問該資料,並執行了修改操作。由於第二個事務的修改,使得第乙個事務多次讀取的資料不相同。既乙個事務兩次讀取的資料不一樣,為不可重複讀。

例: 1.資料x=100。事務a第一次訪問資料x=100。

2.事務b訪問資料x,並執行操作x=x+10=110。

3.事務a再次訪問資料x=110。

幻讀:第乙個事務對錶中所有行資料進行了修改。同時,第二個事務向表中插入了一條新的資料。第乙個事務執行後發現仍有一條資料沒有修改。

例: 1.資料x=100,資料y=100。事務a對錶中所有資料+10。a=a+10=110。b=b+10=110。

2.同時,事務b向表中插入資料z=100。

3.事務a執行完發現表中出現z=100。

讀未提交

讀已提交(解決髒讀)

例:資料x=100;事務a訪問資料x並執行x=x+10=110;同時,事務b併發訪問資料x;因為設定事務隔離級別為讀已提交,此時事務a執行並提交後,事務b才可訪問資料x=110。解決髒讀。

可重複讀(解決髒讀、不可重複讀)

例:資料x=100;事務a多次訪問資料x;a第一次訪問資料x=100;因為設定事務隔離級別為可重複讀,既只有當事務a執行完成後事務b才可執行;事務a第二次訪問資料x=100;之後事務b併發訪問資料x並執行x=x+10=110。解決不可重複讀。

可序列化(解決髒讀、不可重複讀、幻讀)

事務 髒讀 不可重複讀 幻讀

建立db8資料庫 create database db8 使用db8資料庫 use db8 建立賬戶表 create table account id int primary keyauto increment 賬戶id name varchar 20 賬戶名稱 money double 賬戶餘額 ...

事務以及髒讀 幻讀 不可重複讀

事務 是指資料庫中的一連串的連續操作,而且這一系列連續的操作要麼全部執行成功,要麼全部執行不成功。具有著原子性。事務的特點 1,原子性 要麼都執行成功,要麼都不成功 2,一致性 3,隔離性 不同的事務不知道對方的執行過程以及執行到了什麼程度 4,永續性 每個事務執行完畢必然會對資料庫進行資料的持久化...

事務隔離級別與髒讀 幻讀 不可重複讀

我們知道,事務的四大特性是a 原子性 c 一致性 i 隔離性 d 永續性 事務隔離級別就是為了滿足隔離性的機制。在併發場景下,如果沒有一定的處理方式,就會出現髒讀 幻讀 不可重複讀三類問題。髒讀 事務a在執行過程中,修改了某資料,事務b讀取了修改後的資料,然後事務a進行了回滾操作,這個時候事務b讀取...