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