MySQL系列 事務隔離級別

2021-09-27 21:49:38 字數 2759 閱讀 2356

序號

隔離級別

設定命令

查詢隔離級別

1讀未提交(read uncommitted)

讀取未提交(持久化)的資料

set session transaction isolation level read uncommitted

2讀已提交(read committed)

讀取已隱式提交(持久化)的資料

set session transaction isolation level read committed

3可重複讀(repeatable read)

乙個事務讀取另乙個事務已隱式提交(持久化)的資料,但第一次讀取的資料,即使其他事務修改,獲取的仍不變

set session transaction isolation level repeatable read;

4序列化(serializable)

讀-讀併發,只要有乙個事務寫,其他所有事務訪問(讀,寫)該條資料,都需等待

set session transaction isolation level serializable

序號隔離級別

髒讀不可重複讀幻讀1

讀未提交yy

y2讀已提交ny

y3可重複讀nn

y4序列化nnn

開啟mysql事務:begin;命令並未實際開啟乙個事務,只有增刪改查會開啟乙個事務.

圖 事務開啟比較

事務a事務b

begin;

-insert into transaction_test (score) values (66);

begin;

-select * from transaction_test;

rollback;

select * from transaction_test;

commit;

commit;

圖 讀未提交

即使事務a未提交,事務b仍可讀到事務a修改但未提交的資料,即髒讀.

事務a事務b

圖 讀已提交

圖 讀已提交-幻讀

讀已提交自帶幻讀屬性,只要提交,就會讀取.

事務a事務b

圖 可重複讀-快照讀

快照讀:事務開啟時,讀取的資料庫版本號為所有併發事務開啟前的持久化版本號,所以,不會產生幻讀.

事務a事務b

begin;

-insert into transaction_test (score) values (90);

begin;

-select * from transaction_test lock in share mode;

-(等待資料提交,此時鎖住,讀不到資料)

commit;

讀取實時提交的資料,產生幻讀

-commit;

圖 可重複讀-當前讀

讀取資料庫事務實時變化.開啟兩個事務,a和b,當事務b使用當前讀時,事務a改變的資料會實時更新到事務b中,若插入資料,則產生幻讀.

事務a事務b

begin;

begin;

select * from transaction_test;

select * from transaction_test;

update transaction_test set score=88 where id=2;-等待

--等待

commit;

更新成功

圖 序列化

序列化:讀-讀併發,其他情況均是鎖(阻塞),每次只能處理乙個事務,順序執行,如上,當事務a和事務b開啟後,可同時查資料,當事務a更新資料時,事務b還為結束,事務a等待其他事務(b)結束,當事務b提交後,更新成功.

【參考文獻】

[1][2]

[3][4]

[5]

mysql隔離級別 MySQL 事務隔離級別

mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...

MySQL事務隔離級別

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...

Mysql 事務隔離級別

mysql 5.5預設儲存引擎 表型別 使用的是innodb,它是支援acid特性的 acid,指資料庫的原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫系統,必需要具有這四種特性,否...