隔離級(jí)別 | 臟讀可能性 | 不可重復(fù)度可能性 | 幻讀可能性 | 加鎖讀 |
READ UNCONMITED | Yes | Yes | Yes | No |
RED COMMITED | No | Yes | Yes | No |
REPEATABLE READ | No | No | Yes | No |
SERIALIZABLE | No | No | No | Yes |
2)如果查看修改和MySQL的隔離級(jí)別
show variables like 'tx_isolation'; # 查看隔離級(jí)別,MySQL8以前 show variables like 'transaction_isolation'; # 查看隔離級(jí)別,MySQL8 set global transaction_isolation='READ-COMMITTED'; // 設(shè)置隔離級(jí)別,閥域READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE
事務(wù)的隔離級(jí)別可以是Session層的,我們可以對(duì)不同的Session設(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;
3)Spring事務(wù)隔離級(jí)別
Spring事務(wù)默認(rèn)使用數(shù)據(jù)庫的隔離級(jí)別,可以通過注解@Transactional中的isolation參數(shù)調(diào)整Session級(jí)的隔離級(jí)別。隔離級(jí)別是會(huì)話級(jí)別的,JDBC的java.sql.Connection接口支持隔離級(jí)別的設(shè)置。
Spring在開啟事務(wù)時(shí)(DataSourceTransactionManager.doBegin),根據(jù)注解配置,對(duì)Connection的隔離級(jí)別進(jìn)行設(shè)置:
MySQL驅(qū)動(dòng)com.mysql.cj.jdbc.ConnectionImpl執(zhí)行SQL語句調(diào)整會(huì)話級(jí)的隔離級(jí)別
3、死鎖
死鎖是指兩個(gè)或多個(gè)事務(wù)在同一資源上相互占用,并請(qǐng)求鎖定對(duì)方占用的資源,從而導(dǎo)致惡性循環(huán)。死鎖示例:
# 事務(wù)一 start transaction; update account set money=10 where id=1; update account set money=20 where id=2; commit; # 事務(wù)二 start transaction; update account set money=10 where id=2; update account set money=20 where id=1; commit;
假設(shè)碰巧,事務(wù)一和事務(wù)二同時(shí)執(zhí)行完第一個(gè)update語句,接著準(zhǔn)備執(zhí)行第二條update語句,卻發(fā)現(xiàn)記錄已被對(duì)方鎖定,然后2個(gè)事務(wù)都等待對(duì)方釋放資源,同時(shí)持有對(duì)方需要的鎖,這樣就會(huì)出現(xiàn)死循環(huán)。
為了避免死鎖問題,數(shù)據(jù)庫實(shí)現(xiàn)了各種死鎖檢測(cè)和死鎖超長(zhǎng)機(jī)制,InnoDB處理死鎖的方式是:將持有最少行級(jí)排他鎖的事務(wù)進(jìn)行回滾。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:澳門 定西 杭州 白銀 恩施 益陽 寧夏 秦皇島
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL事務(wù)及Spring隔離級(jí)別實(shí)現(xiàn)原理詳解》,本文關(guān)鍵詞 MySQL,事務(wù),及,Spring,隔離,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。