全文大約【1505】字,不說(shuō)廢話,只講可以讓你學(xué)到技術(shù)、明白原理的純干貨!本文帶有豐富案例及配圖視頻,讓你更好的理解和運(yùn)用文中的技術(shù)概念,并可以給你帶來(lái)具有足夠啟迪的思考......
一. 事務(wù)隔離級(jí)別
什么是事務(wù)隔離級(jí)別呢?對(duì)我們的日常操作結(jié)果又有什么影響呢?下面小編帶各位小伙伴先來(lái)了解下事務(wù)隔離級(jí)別的概念。
1.隔離級(jí)別的概念
多個(gè)客戶端操作時(shí) ,各個(gè)客戶端的事務(wù)之間應(yīng)該是隔離的,相互獨(dú)立的 , 不受影響的。
如果多個(gè)事務(wù)操作同一批數(shù)據(jù)時(shí),則需要設(shè)置不同的隔離級(jí)別 , 否則就會(huì)產(chǎn)生問(wèn)題 。
2.四種隔離級(jí)別
我們先來(lái)了解一下四種隔離級(jí)別的名稱 , 再來(lái)看看可能出現(xiàn)的問(wèn)題。
3.可能引發(fā)的問(wèn)題
下面小編總結(jié)了數(shù)據(jù)庫(kù)中不同事務(wù)隔離級(jí)別可能引發(fā)的問(wèn)題。各位小伙伴可以參照下。
4.數(shù)據(jù)庫(kù)隔離級(jí)別操作語(yǔ)法
查詢數(shù)據(jù)庫(kù)隔離級(jí)別:
語(yǔ)法:SELECT @@TX_ISOLATION;
修改數(shù)據(jù)庫(kù)隔離級(jí)別:
語(yǔ)法:SET GLOBAL TRANSACTION ISOLATION LEVEL 級(jí)別字符串;
5.事務(wù)隔離級(jí)別演示
舉個(gè)栗子:臟讀的問(wèn)題。
-- 查詢賬戶表
select * from account;
-- 設(shè)置隔離級(jí)別為read uncommitted
set global transaction isolation level read uncommitted;
-- 開(kāi)啟事務(wù)
start transaction;
-- 轉(zhuǎn)賬
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;
-- 窗口2查詢轉(zhuǎn)賬結(jié)果 ,出現(xiàn)臟讀(查詢到其他事務(wù)未提交的數(shù)據(jù))
-- 窗口2查看轉(zhuǎn)賬結(jié)果后,執(zhí)行回滾
rollback;
舉個(gè)栗子:解決臟讀的問(wèn)題和演示不可重復(fù)讀的問(wèn)題。
-- 設(shè)置隔離級(jí)別為read committed
set global transaction isolation level read committed;
-- 開(kāi)啟事務(wù)
start transaction;
-- 轉(zhuǎn)賬
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;
-- 窗口2查看轉(zhuǎn)賬結(jié)果,并沒(méi)有發(fā)生變化(臟讀問(wèn)題被解決了)
-- 執(zhí)行提交事務(wù)。
commit;
-- 窗口2查看轉(zhuǎn)賬結(jié)果,數(shù)據(jù)發(fā)生了變化(出現(xiàn)了不可重復(fù)讀的問(wèn)題,讀取到其他事務(wù)已提交的數(shù)據(jù))
舉個(gè)栗子:解決不可重復(fù)讀的問(wèn)題。
-- 設(shè)置隔離級(jí)別為repeatable read
set global transaction isolation level repeatable read;
-- 開(kāi)啟事務(wù)
start transaction;
-- 轉(zhuǎn)賬
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;
-- 窗口2查看轉(zhuǎn)賬結(jié)果,并沒(méi)有發(fā)生變化
-- 執(zhí)行提交事務(wù)
commit;
-- 這個(gè)時(shí)候窗口2只要還在上次事務(wù)中,看到的結(jié)果都是相同的。
-- 只有窗口2結(jié)束事務(wù),才能看到變化(不可重復(fù)讀的問(wèn)題被解決)
6.隔離級(jí)別總結(jié)
注意:隔離級(jí)別從小到大安全性越來(lái)越高,但是效率越來(lái)越低 , 所以不建議使用READ UNCOMMITTED 和 SERIALIZABLE 隔離級(jí)別。
二. 結(jié)語(yǔ)
小編在這里對(duì)本文核心要點(diǎn)進(jìn)行總結(jié):
1.理解臟讀、幻讀、不可重復(fù)讀產(chǎn)生的原因和解決辦法。
2.各位小伙伴熟練記住不同隔離級(jí)別以及會(huì)導(dǎo)致的問(wèn)題。