mysql事務的讀 MySQL事務的讀髒

2021-10-19 19:02:51 字數 1169 閱讀 4827

所謂讀髒,是指乙個事務讀取了,另外乙個事務未提交的資料

首先,開啟兩個命令列視窗,模擬賬戶a和賬戶b

登入到資料庫,chapter06

設定b賬戶,事務的隔離級別

mysql預設的隔離級別是repeatable read——可重複讀

該級別是可以避免讀髒的,因此,需要將b賬戶中事務的隔離級別設定為read uncommitted——讀未提交

set session transaction isolation level read uncommitted;

引數說明

session,表示當前會話

transaction,表示事務

isolation,表示隔離

level,表示級別

read uncommitted,表示當前的隔離級別

可以看出,b賬戶的隔離級別,已經設定為了read uncommitted

演示讀髒

b賬戶,為了證明出現讀髒的情況,首先,在b賬戶中開啟乙個事務,並在該事務中,查詢當前賬戶的餘額資訊

a賬戶,在a賬戶中開啟乙個事務,在當前視窗中,執行轉賬功能

注意,此時,不要提交事務

如果,提交事務,就無法演示出現讀髒的情況

b賬戶,a賬戶執行完轉賬語句後,b賬戶查詢當前賬戶

可以看出,a賬戶已經成功給b賬戶,轉賬了100元

這時,由於b賬戶的事務隔離級別較低,因此,讀取了a賬戶中,還沒有提交的內容,出現了髒讀的情況,此時,b誤以為a賬戶已經轉賬成功了,便給a發貨

當b發貨之後,a如果不提交事務,而是將事務回滾,此時,b就受了損失

演示完畢之後,將a賬戶中的事務回滾,b賬戶中的事務提交

設定b賬戶中,事務的隔離級別

為了防止髒讀發生,將b賬戶的隔離級別設定為read commited——讀提交,該級別可以避免讀髒

可以看出,b賬戶的隔離級別,已經設定為了read committed;

驗證是否髒讀

b賬戶,在b賬戶中開啟乙個事務,在事務中查詢個賬戶的餘額

a賬戶,在a賬戶中,重新開啟乙個事務,實現轉賬功能

b賬戶,當a賬戶轉賬成功之後,在b賬戶中,查詢各賬戶的餘額

可以看出,b賬戶在同乙個事務中,查詢結果是一致的,並沒有查詢到a賬戶中,未提交的內容 因此,說明read committed隔離級別可以避免讀髒,最後,分別將a賬戶和b賬戶中的事務回滾

事務隔離髒讀幻讀 mysql

先說什麼叫做 事務隔離 事務隔離是指多個事務同時在進行中 如果只有乙個事務,那就無所謂隔離不隔離了 時,各個事務被隔離開來,相互之間的影響和事物的隔離級別有關,按照 讀未提交 讀已提交 可重複讀 序列化 的順序,越往後面隔離級別越高,事務之間的影響越小。下面的內容都以這個資料表為例進行說明 idmo...

mysql sql 事務寫作 mysql中的事務

事務 事務是一組原子性sql查詢語句,被當作乙個工作單元。若mysql對改事務單元內的所有sql語句都正常的執行完,則事務操作視為成功,所有的sql語句才對資料生效,若sql中任意不能執行或出錯則事務操作失敗,所有對資料的操作則無效 通過回滾恢復資料 事務有四個屬性 原子性 事務被認為不可分的乙個工...

mysql事務隔離級別幻讀的解釋

不可重複度和幻讀區別 不可重複讀的重點是修改,幻讀的重點在於新增或者刪除。例1 同樣的條件,你讀取過的資料,再次讀取出來發現值不一樣了 事務1中的a先生讀取自己的工資為 1000的操作還沒完成,事務2中的b先生就修改了a的工資為2000,導 致a再讀自己的工資時工資變為 2000 這就是不可重複讀。...