關於msyql事務隔離你要知道

2022-09-24 23:03:19 字數 1339 閱讀 9694

什麼是事務?

事務是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。資料庫事務通常包含了乙個序列的對資料庫的讀/寫操作。包含有以下兩個目的:

隔離性與隔離級別

提到事務,你肯定會想到acid(atomicity、consistency、isolation、durability,即原子性、一致性、隔離性、永續性),今 天我們就來說說其中i,也就是「隔離性」。當資料庫上有多個事務同時執行的時候,就可能出現髒讀(dirty read)、不可重複讀(non-repeatable read)、幻讀 (phantom read)的問題,為了解決這些問題,就有了「隔離級別」的概念。隔離級別做的越強則效能就越不好,所以要在效能與隔離級別中取乙個平衡點。程式設計客棧sql標準的事務隔離級別包括:

隔離級別

髒讀不可重複讀

幻讀讀未提交

可以出現

可以出現

可以出現

讀提交不允許出現

可以出現

可以出現

可重複讀

不允許出現

不允許出現

可以出現

序列化不允許出現

不允許出現

不允許出現

主要是讀已提交和可重複讀比較難區分,所以我們看個小例子。先建立一張表,並插入資料1

create database test;

use test;

create table test(id int primary key);

insert into test(id) values(1);

事cpxfrrmnq務a

事務b啟動事務查詢得到1

啟動事務

查詢得到1

將1改為2

查詢得到v1

提交事務b

查詢得到v2

提交事務a

查詢得到v3

我們來看看在不同的隔離級別下,事務a會有哪些不同的返回結果,也就是圖裡面v1、v2、v3的返回值分別是什麼。

資料庫裡面會建立乙個檢視,訪問的時候以檢視的邏輯結果為準。在「可重複讀」隔離級別下,這個檢視是在事務啟 動時建立的,整個事務存在期間都用這個檢視。在「讀提交」隔離級別下,這個檢視是在每個sql語句開始執行的時候建立的。 這裡需要注意的是,「讀未提交」隔離級別下直接返回記錄上的最新值,沒有檢視概念;而「序列化」隔離級別下直接用加鎖的方式來避免並行訪問。

那什麼時候需 要**「可重複讀」**的場景呢?

假設你在管理乙個個人銀行賬戶表。乙個表存了每個月月底的餘額,乙個表存了賬單明細。這時候你要做資料校對,也就是判斷上個月的餘額和當前餘額的差額,是否與本月的賬單明細一致。你一定希望在校對過程中,即使有使用者發生了一筆新的交 易,也不影響你的校對結果。

事務隔離的實現

msyql事務隔離心得

髒讀 事物a操作修改操作沒有提交事務,事務b讀取資料拿到修改後的資料去執行操作了,這時候第事務a回滾,對於事務b就是髒讀。不可重複讀 事務a讀取資料,事務b把資料改了,事務a讀取了事務b更改後的資料。同乙個是事務裡讀出了兩個不一樣的資料。幻讀 事務a修改全表,事務b增加一條資料,對於事務a就是幻讀。...

關於IIS,你要知道的。

什麼是iis?iis是internet information server internet資訊服務 英文全稱的縮寫,是微軟公司主推的web伺服器。iis並不是一種程式語言,它只是一種 環境 一種讓asp語言執行的環境。是一種web 網頁 服務元件,用來搭載 執行程式的平台。iis的作用是什麼?專...

面試 關於事務隔離級別

事務的四種隔離級別 讀未提交 會出現髒讀,即在事務a可以讀到事務b未提交的髒資料。讀已提交 事務a只能讀到事務b提交後的資料,可以避免髒讀,但是會出現不可重複讀的情景。即 事務a在兩次讀取同一條資料的過程中,事務b對該條資料進行了update,導致事務a在事務b提交資料前後兩次讀取的資料不一樣,該現...