事務(wù)屬性:隔離級(jí)別
事務(wù):邏輯上的一組操作,這些操作要么都成功,有一個(gè)失敗所有都失敗
1、數(shù)據(jù)庫(kù)訪問(wèn)中三個(gè)讀的問(wèn)題
1、臟讀:在數(shù)據(jù)庫(kù)訪問(wèn)中,事務(wù)T1將某一值修改,然后事務(wù)T2讀取該值,此后T1因?yàn)槟撤N原因撤銷對(duì)該值的修改,這就導(dǎo)致了T2所讀取到的數(shù)據(jù)是無(wú)效的。
2、不可重復(fù)讀:指在數(shù)據(jù)庫(kù)訪問(wèn)中,一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù)。如事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù),T1為了對(duì)讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果
3、虛讀(也稱幻讀):幻讀,即一個(gè)事務(wù)在前后兩次查詢同一個(gè)范圍的時(shí)候,后一次查詢看到了前一次查詢沒(méi)有看到的行。如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,比如這種修改涉及到表中的“全部數(shù)據(jù)行”。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入“一行新數(shù)據(jù)”。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還存在沒(méi)有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺(jué)一樣.
2、隔離級(jí)別介紹
數(shù)據(jù)庫(kù)系統(tǒng)必須具有隔離并發(fā)運(yùn)行各個(gè)事務(wù)的能力,使它們不會(huì)相互影響,避免各種并發(fā)問(wèn)題。一個(gè)事務(wù)與其他事務(wù)隔離的程度稱為隔離級(jí)別。SQL標(biāo)準(zhǔn)中規(guī)定了多種事務(wù)隔離級(jí)別,不同隔離級(jí)別對(duì)應(yīng)不同的干擾程度,隔離級(jí)別越高,數(shù)據(jù)一致性就越好,但并發(fā)性越弱。
隔離級(jí)別一共有四種:
-
讀未提交:READ UNCOMMITTED (read uncomitted)
允許Transaction01讀取Transaction02未提交的修改。
-
讀已提交:READ COMMITTED(read committed)
要求Transaction01只能讀取Transaction02已提交的修改。
-
可重復(fù)讀:REPEATABLE READ (repeatable read)
確保Transaction01可以多次從一個(gè)字段中讀取到相同的值,即Transaction01執(zhí)行期間禁止其它事務(wù)對(duì)這個(gè)字段進(jìn)行更新。
-
串行化:SERIALIZABLE(serializable)
確保Transaction01可以多次從一個(gè)表中讀取到相同的行,在Transaction01執(zhí)行期間,禁止其它事務(wù)對(duì)這個(gè)表進(jìn)行添加、更新、刪除操作??梢员苊馊魏尾l(fā)問(wèn)題,但性能十分低下。
各個(gè)隔離級(jí)別解決并發(fā)問(wèn)題的能力見(jiàn)下表:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-416371.html
隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻讀 |
---|---|---|---|
READ UNCOMMITTED (read uncomitted)讀未提交 | 有 | 有 | 有 |
READ COMMITTED (read comitted) 讀已提交 | 無(wú) | 有 | 有 |
REPEATABLE READ (repeatable read) 可重復(fù)讀 | 無(wú) | 無(wú) | 有 |
SERIALIZABLE (serializable) 串行化 | 無(wú) | 無(wú) | 無(wú) |
各種數(shù)據(jù)庫(kù)產(chǎn)品對(duì)事務(wù)隔離級(jí)別的支持程度:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-416371.html
隔離級(jí)別 | Oracle | MySQL |
---|---|---|
READ UNCOMMITTED(read uncommited) | × | √ |
READ COMMITTED(read committed) | √(默認(rèn)) | √ |
REPEATABLE READ(repeatable read) | × | √(默認(rèn)) |
SERIALIZABLE(serializable) | √ | √ |
3、使用方式
@Transactional(isolation = Isolation.DEFAULT)//使用數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別
@Transactional(isolation = Isolation.READ_UNCOMMITTED)//讀未提交
@Transactional(isolation = Isolation.READ_COMMITTED)//讀已提交
@Transactional(isolation = Isolation.REPEATABLE_READ)//可重復(fù)讀
@Transactional(isolation = Isolation.SERIALIZABLE)//串行化
到了這里,關(guān)于事務(wù)相關(guān)概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!