Isolation Level(數(shù)據(jù)庫隔離級別)

事務(wù)隔離是數(shù)據(jù)庫處理的基礎(chǔ)之一。隔離級別是在多個(gè)事務(wù)進(jìn)行更改并同時(shí)執(zhí)行查詢時(shí),對結(jié)果的性能、可靠性、一致性和可重現(xiàn)性進(jìn)行微調(diào)的設(shè)置。

InnoDB提供了標(biāo)準(zhǔn)的四個(gè)事務(wù)隔離級別:READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE。InnoDB的默認(rèn)隔離級別是REPEATABLE READ。

四類數(shù)據(jù)庫隔離級別和各自的并發(fā)副作用

Isolation Level Dirty Read Non Repeatable Read Phantom
READ UNCOMMITTED Yes Yes Yes
READ COMMITTED No Yes Yes
REPEATABLE READ No No Yes
SERIALIZABLE No No No

四類隔離級別

  • READ UNCOMMITTED(讀未提交)

    即該事務(wù)可以讀取其它事務(wù)已經(jīng)修改但是沒有提交的數(shù)據(jù)
    讀取到未提交的數(shù)據(jù),也稱之為臟讀
  • READ COMMITTED(讀已提交)

    該事務(wù)只能讀取其它事務(wù)已經(jīng)修改并且提交的數(shù)據(jù)
  • REPEATABLE READ(可重復(fù)讀)

    該事務(wù)可以保證在事務(wù)期間,讀到的數(shù)據(jù)是一樣的,即可重復(fù)讀
  • SERIALIZABLE(序列化)

    序列化指數(shù)據(jù)庫同一時(shí)間只能執(zhí)行一個(gè)事務(wù)。此時(shí)數(shù)據(jù)庫的并發(fā) 能力為1,很容易造成超時(shí),一般情況下不會使用SERIALIZABLE作為數(shù)據(jù)庫的隔離級別

三類并發(fā)副作用

  • Dirty Read(臟讀)

    臟讀指的是,事務(wù)讀到了其它事務(wù)已經(jīng)修改但還沒有提交的數(shù)據(jù),如果此時(shí)正在修改該數(shù)據(jù)的事務(wù)進(jìn)行回滾操作,那么當(dāng)前事務(wù)讀到的數(shù)據(jù)就是臟數(shù)據(jù)了
  • Non Repeatable Read(不可重復(fù)讀)

    不可重復(fù)讀指的是在當(dāng)前事務(wù)的執(zhí)行期間,讀取相同的數(shù)據(jù),會得到不同的結(jié)果
  • Phantom(幻讀)

    幻讀指的是下面這么一種情況,事務(wù)A打算對表里指定范圍內(nèi)的數(shù)據(jù)進(jìn)行操作,事務(wù)A首先讀取了該范圍內(nèi)的數(shù)據(jù)(假如有30行),然后事務(wù)B在當(dāng)前表內(nèi)添加了5行數(shù)據(jù)(且在A將要操作的范圍內(nèi)),然后事務(wù)A對指定范圍內(nèi)的數(shù)據(jù)進(jìn)行更新操作,更新完之后再次查詢時(shí),發(fā)現(xiàn)卻對35行數(shù)據(jù)進(jìn)行了更新,這樣就產(chǎn)生了幻讀

在MySQL中設(shè)置數(shù)據(jù)庫隔離級別:

set session transaction isolation level READ UNCOMMITTED
set session transaction isolation level READ COMMITTED
set session transaction isolation level REPEATABLE READ
set session transaction isolation level SERIALIZABLE

在MySQL中查看數(shù)據(jù)庫隔離級別:

SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

MySQL語句事務(wù)操作:

start transaction
select * from stocks
insert into stocks (stock) values (1000)
commit
start transaction
select * from stocks
update stocks set stock = 10 where id = 2
roolback
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容