什麼是事務?
事務是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。資料庫事務通常包含了乙個序列的對資料庫的讀/寫操作。包含有以下兩個目的:
隔離性與隔離級別
提到事務,你肯定會想到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提交資料前後兩次讀取的資料不一樣,該現...