mysql的传播特性_spring事务传播特性和mysql事务隔离级别
spring事務(wù)的傳播特性--7種
REQUIRED
支持當(dāng)前事務(wù),如果沒有事務(wù)會創(chuàng)建一個新的事務(wù)
SUPPORTS
支持當(dāng)前事務(wù),如果沒有事務(wù)的話以非事務(wù)方式執(zhí)行
MANDATORY(強(qiáng)制性)
支持當(dāng)前事務(wù),如果沒有事務(wù)拋出異常
REQUIRES_NEW
創(chuàng)建一個新的事物并掛起當(dāng)前事務(wù)
NOT_SUPPORTED
以非事務(wù)執(zhí)行,如果當(dāng)前有事務(wù),則將當(dāng)前事務(wù)掛起
NEVER
以非事務(wù)執(zhí)行,如果存在事務(wù),則拋出異常
NESTED(嵌套)
如果當(dāng)前存在事務(wù),則嵌套事務(wù)內(nèi)執(zhí)行,如果當(dāng)前沒有事務(wù),則進(jìn)行REQUIRED
案例:有事務(wù)指的是@Transactional(propagation = Propagation.REQUIRED),也就是默認(rèn)事務(wù)
A:方法
method A(){
sql-a--//向stu表中插入數(shù)據(jù);
method B();
}
B:方法
method(){
sql-b1--//向stu表中插入數(shù)據(jù);
int a= 1/0;
sql-b2--//向stu表中插入數(shù)據(jù);
}
1.REQUIRED解析:
? 如果A方法上有事務(wù),B方法沒有事務(wù),結(jié)果--一條數(shù)據(jù)都添加不進(jìn)去(A方法有了事務(wù),B方法不管有沒有事務(wù),都是A事務(wù)執(zhí)行。)
? 如果A方法沒有事務(wù),B方法有事務(wù),則a的數(shù)據(jù)會添加成功,B的回滾。
2.SUPPORTS解析:
? 如果A方法有事務(wù),B方法是SUPPORTS,結(jié)果為:一條都添加不進(jìn)去。(A有事務(wù),B是支持事務(wù),B也會使用A的事務(wù))。
? 如果A沒有事務(wù),B為SUPPORTS,結(jié)果:a的sql和b1的sql會執(zhí)行成功(就是沒有事務(wù))表里會有a,b1的數(shù)據(jù)
3.MANDATORY解析:
? 如果A有事務(wù),B為MANDATORY,結(jié)果:一條都加不進(jìn)去(A有事務(wù),B為強(qiáng)制事務(wù),會加入A的事務(wù))
? 如果A沒有事務(wù),B為MANDATORY,結(jié)果:拋出異常:IllegalTransactionStateException,a的數(shù)據(jù)添加成功。
4.REQUIRES_NEW解析:
? 如果A有事務(wù),B為REQUIRES_NEW,結(jié)果:全部回滾,
? 如果A沒有事務(wù),B為REQUIRES_NEW,結(jié)果:a數(shù)據(jù)添加成功,B方法的全部回滾
5.NOT_SUPPORTED解析:
? 如果A有事務(wù),B為NOT_SUPPORTED,結(jié)果:A的結(jié)果回滾,B為不用事務(wù)執(zhí)行。
? 如果A沒有事務(wù),B為NOT_SUPPORTED,結(jié)果,全部不用回滾(就是非事務(wù))
6.NEVER解析:
? 如果A有事務(wù),B為NEVER,結(jié)果:全部回滾,
7.NESTED:
? 如果A有事務(wù),B為NESTED,結(jié)果:全部回滾。
? 如果A沒有事務(wù),B為NESTED,結(jié)果:a添加成功,b失敗回滾(也就是以事務(wù)執(zhí)行)
Mysql的事務(wù)隔離級別(4種)
read uncommitted(讀未提交)
事務(wù)中的修改,即使沒有提交也被其他事務(wù)讀取到,這種情況也叫臟讀。
read committed(讀已提交)
一個事務(wù)開始時,只能看到已經(jīng)提交的事務(wù)所做的修改。兩次執(zhí)行同樣的查詢,可能會得到不同的結(jié)果
repeatable read(可重復(fù)讀)
會產(chǎn)生幻讀。當(dāng)某個事物在讀取某個范圍的記錄時,另一個事務(wù)又在該范圍內(nèi)插入新的記錄,當(dāng)之前的事務(wù)再次讀取該范圍的記錄時,會產(chǎn)生幻行。
serializable(可串行化,默認(rèn)最高級別)
總結(jié)
以上是生活随笔為你收集整理的mysql的传播特性_spring事务传播特性和mysql事务隔离级别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gcasInstallHelper.ex
- 下一篇: Java设计流程执行器_Java进阶面试