MySQL資料庫事務和隔離級別

2021-09-12 15:46:28 字數 1749 閱讀 4702

資料庫事務和隔離級別

事務資料庫事務是指作為單個邏輯工作單元執行的一系列操作,要麼完全的執行,要麼完全的不執行。一方面,當多個應用程式併發訪問資料庫時,事務可以在應用程式間提供乙個隔離方法,防止互相干擾。另一方面,事務為資料庫提供了乙個從失敗恢復正常的方法。

事務具有四個特性:

原子性(atomicity)、

一致性(consistency)、

隔離性(isolation)、

永續性(durability),

簡稱acid

<1>原子性:

是指事務中的操作不可拆分,只允許全部執行或者全部不執行

<2>一致性:

是指事務的執行不能破壞資料庫的一致性,一致性也稱完整性。乙個事務在執行後,資料庫必須從乙個一致性狀態轉變為另乙個一致性狀態。

<3>隔離性:

是指併發的事務相互隔離,不能互相干擾。

<4>永續性:

是指事務一旦提交,對資料庫的更改狀態將被永久的儲存。

隔離級別:

資料庫的事務隔離級別有四個,由低到高分別是read uncommitted、read committed、repeatable read、serializable,這四個級別可以逐個解決髒讀、不可重複讀、幻讀這幾類問題。

√: 可能出現 ×: 不會出現 髒讀

不可重複讀

幻讀readuncommitted√√

√read committed×√

√repeatable read××

√serializable××

×注意:我們討論事務隔離級別的場景,主要是在多個事務併發的情況下。

read uncommitted 讀未提交:

髒讀:乙個事務讀到另乙個事務未提交的更新資料

例:公司發工資了,領導把5000元打到singo的賬號上,但是該事務並未提交,而singo正好去檢視賬戶,發現工資已經到賬,是5000元整,非常高 興。可是不幸的是,領導發現發給singo的工資金額不對,是2000元,於是迅速回滾了事務,修改金額後,將事務提交,最後singo實際的工資只有 2000元,singo空歡喜一場。

當隔離級別設定為read uncommitted 時,就可能出現髒讀。

read committed 讀提交:

不可重複讀:指在乙個事務內多次讀取同乙個資料。在這個事務還沒有結束時,另外乙個事務也訪問同乙個資料。在第乙個事務多次讀取資料之間,另外乙個事務對資料進行了修改,並提交了事務,那麼第乙個事務在多次讀取資料時,發現資料不一致。

當資料庫級別為read committed的時候回避免髒讀,但是會造成不可重複讀。

oracle預設隔離級別 read committed。

repeatable read 重複讀:

幻讀:事務a在執行讀取操作,第一次查詢資料總量後,事務b執行了一條新增的操作後並提交了事務,這時事務a再次讀取資料發現讀取到的資料和之前的不一樣了,就像產生幻覺一樣。

repeatable read避免了不可重複讀,但是可能出現幻讀。

mysql預設隔離級別

serializable 序列化:

serializable 是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。

如有總結不當,有問題,錯誤的地方請大家予以指正,共同學習,共同進步

mysql資料庫事務隔離級別

1修改事務隔離級別 全域性修改 修改mysql.ini配置檔案 mysqlid transaction isolation repeatble read 對當前session修改 登入mysql客戶端後,執行命令set session transaction isolation level read...

MYSQL 資料庫 事務 隔離級別

定義 在資料庫 中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別,由低到高依次為 1 read uncommitted 未授權讀取 讀未提交 2 read committed 授權讀取 讀提交 3 repeatable read 可重複讀取 4 serializable 序列化 這四個事務隔...

MySQL資料庫事務隔離級別

一 資料庫事務併發訪問引發的問題 二 mysql資料庫的四種事務隔離級別 隔離級別 名稱髒讀 不可重複讀 幻讀資料庫預設級別 read uncommitted 讀未提交是是 是read committed 讀已提交否是 是oracle sql server repeatable read 可重複讀否...