事務的四大特性和隔離級別

2021-07-10 06:21:58 字數 1475 閱讀 7338

事務,其定義是應用程式中一系列不可分割的操作,就是一組可以完成某個業務的**集合,在關聯式資料庫中,事務可以是一條sql語句,或者一組sql語句,亦或整個程式。

其中事務有四個特徵,必須同時滿足這四個特徵才是乙個完整的事務。即事務的acid特性:

原子性(atomicity):

即事務是資料庫的不可分割單元,事務內的操作要麼全部執行完成,如果有乙個失敗,則事務內的操作全部失敗。

一致性(consistency):

即事務必須使資料庫從乙個一致性狀態變成另外乙個一致性狀態,原子性和一致性是密切相關的。

隔離性(isolation):

即事務和事務之間沒有影響關係,這個事務的執行不能被其它事務所干擾。併發執行的各個事務不能互相干擾,具有隔離性。

永續性(durability):

如果事務對資料庫進行了操作並進行了提交,則資料庫對此的改變應該具有永續性,不能因為其它操作或者資料庫的損壞而丟失資料。故事務應該具有永續性。

這是事務的四大特性,在併發情況下,事務會產生以下問題:

更新丟失:

兩個事務都對同一行資料進行更新,但是第二組事務因為某種原因而中途即退出,所以導致兩個事務對資料的修改都失敗。

髒讀:乙個事務讀取了另乙個事務沒有提交的資料叫做髒讀。例如,a事務正在修改資料,但是還沒有修改完畢進行提交,這個過程中b事務對這條資料進行了讀取操作,b事務產生了髒讀。

不可重複讀:

乙個事務在對資料庫進行了再次查詢操作,但是即產生了不同結果,資料本身產生了變化,此為不可重複讀。例如,a事務第一次查詢此條資料,而b事務對此條資料進行了修改,而後a事務又再次查詢了此條資料,卻不是預期的結果,不能重複讀取。故不可重複讀(進行了update操作)。

幻讀:

乙個事務在對資料庫進行了再次查詢操作,但是卻產生了不同結果,或是少了資料行,或是多了未知資料行,此為幻讀(一定要明白是資料條數,不是資料本身)。例如,a事務第一次查詢此條資料,而b事務對此表進行了插入或者刪除操作,而後a事務又再次查詢了此表,卻產生了與上次不一樣的條數記錄。故為幻讀(進行了insert/delete操作)。

為了解決以上問題,所以引出了事務的隔離級別:

讀未提交:

在該隔離級別,所有事務都可以看到其它事務未提交的內容資料,此隔離級別沒有解決任何併發問題,故在應用場景中不常用。

讀已提交:

在該隔離級別,乙個事務只能讀取其它事務已經提交的內容資料,此隔離級別解決了髒讀,但沒有解決不可重複讀和幻讀,是oracle的預設隔離級別。

可重複讀:

在該隔離級別,能保證乙個事務之間的多個例項在併發能讀取同一資料,此隔離級別解決了髒讀和不可重複讀,是mysql的預設級別。

序列化:

這是最高的隔離級別,在此隔離級別,事務事務之間只能順序執行,使之沒有任何衝突,也就 是從而解決了髒讀,不可重複讀和幻讀,此隔離級別效率較慢,並且有較多的超時現象。

隔離級別越高,越能保證資料的完整性和一致性,但是對併發的效率就越低。一般情況下,採用讀已提交或者可重複讀,它能夠有效避免髒讀和不可重複讀。

事務的四大特性和隔離級別

在資料庫操作中,一項事務 transaction 是由一條或多條運算元據庫的 sql 語句組成的乙個不可分割的工作單元,這些操作要麼都完成,要麼都取消。接下來將圍繞事務的特性 併發問題以及隔離級別進行講解。事務的定義很嚴格,它必須同時滿足四個特性,即原子性 一致性 隔離性和永續性,也就是人們俗稱的 ...

事務的四大特性和隔離級別

事務又分為本地事務和分布式事務 本地事務也稱為資料庫事務或傳統事務 相對於分布式事務而言 它的執行模式就是常見的 transaction begin insert delete update insert delete update transaction commit rollback 本地事務有...

事務的四大特性和隔離級別

1.事務的四大特性 acid 指資料庫事務正確執行的四個基本要素的縮寫。包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫,必需要具有這四種特性,否則在事務過程 transacti...