南寧微信網(wǎng)站制作網(wǎng)頁制作軟件推薦
????????事務(wù)一共有四個(gè)特性:原子性、隔離性、持久性、一致性。簡(jiǎn)稱ACID。本文所將就是其中的隔離性。
1、事務(wù)中因?yàn)楦綦x原因?qū)е碌牟l(fā)問題有哪些?
臟讀:當(dāng)事務(wù)A對(duì)一個(gè)數(shù)據(jù)進(jìn)行修改,但這個(gè)操作還未提交,但此時(shí)事務(wù)B就已經(jīng)讀取到了這個(gè)修改后的數(shù)據(jù),并依據(jù)這個(gè)修改后的數(shù)據(jù)進(jìn)行接下來的操作。這就是臟讀。
不可重復(fù)讀:當(dāng)事務(wù)A讀取數(shù)據(jù),然后對(duì)這個(gè)數(shù)據(jù)進(jìn)行操作,然后再操作期間事務(wù)B對(duì)這個(gè)數(shù)據(jù)進(jìn)行了修改,則等事務(wù)A再次讀取這個(gè)數(shù)據(jù)時(shí),和一開始讀取到的值并不一樣,這就是不可重復(fù)讀。
幻讀:幻讀和不可重復(fù)讀有點(diǎn)類似,幻讀是事務(wù)A對(duì)表中所有屬“豬”的人刪掉,而此時(shí)事務(wù)B對(duì)表中查入一條屬“豬”的人的數(shù)據(jù),并進(jìn)行提交,此時(shí)事務(wù)A就會(huì)以為出現(xiàn)幻覺了,沒有進(jìn)行刪除操作。
臟讀是對(duì)未提交的數(shù)據(jù)的讀取,而不可重復(fù)讀和幻讀都是對(duì)已提交數(shù)據(jù)的讀取。不可重復(fù)讀的重點(diǎn)是修改,幻讀的重點(diǎn)在于新增或者刪除。
2、事務(wù)中的隔離級(jí)別
-
READ-UNCOMMITTED(讀取未提交): 最低的隔離級(jí)別,允許讀取尚未提交的數(shù)據(jù)變更,可能會(huì)導(dǎo)致臟讀、幻讀或不可重復(fù)讀。
-
READ-COMMITTED(讀取已提交): 允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù),可以阻止臟讀,但是幻讀或不可重復(fù)讀仍有可能發(fā)生。
-
REPEATABLE-READ(可重復(fù)讀): 對(duì)同一字段的多次讀取結(jié)果都是一致的,除非數(shù)據(jù)是被本身事務(wù)自己所修改,可以阻止臟讀和不可重復(fù)讀,但幻讀仍有可能發(fā)生。(MySQL默認(rèn)級(jí)別)
-
SERIALIZABLE(可串行化): 最高的隔離級(jí)別,完全服從ACID的隔離級(jí)別。所有的事務(wù)依次逐個(gè)執(zhí)行,這樣事務(wù)之間就完全不可能產(chǎn)生干擾,也就是說,該級(jí)別可以防止臟讀、不可重復(fù)讀以及幻讀。
隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻影讀 |
---|---|---|---|
READ-UNCOMMITTED | √ | √ | √ |
READ-COMMITTED | × | √ | √ |
REPEATABLE-READ | × | × | √ |
SERIALIZABLE | × | × | × |
3、修改隔離級(jí)別
開啟事務(wù):
start transaction;
結(jié)束事務(wù):
commit;? 或者? rollback;
查看隔離級(jí)別
select @@transaction_isolation;
修改隔離級(jí)別
set session transaction isolation level read committed;? #設(shè)置為讀已提交