網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
四種隔離級(jí)別
- 讀未提交
- 讀已提交
- 可重復(fù)讀
- 序列化
如果沒(méi)有隔離,多線程出現(xiàn)的問(wèn)題
- 臟讀
- 第一類丟失更新
- 不可重復(fù)讀
- 第二類丟失更新
- 幻讀
解釋
臟讀:一個(gè)連接讀到另一個(gè)連接修改但沒(méi)有提交的數(shù)據(jù)
第一類丟失更新:a連接開(kāi)啟事務(wù),b連接隨后開(kāi)啟事務(wù)并更新完,但a發(fā)生異常回滾,回到a最初的狀態(tài),把b的更新給淹沒(méi)
不可重復(fù)讀:a讀數(shù)據(jù)假設(shè)為1,b修改數(shù)據(jù)改為2并提交,a再讀數(shù)據(jù)發(fā)現(xiàn)數(shù)據(jù)變?yōu)?
第二類丟失更新:a連接開(kāi)啟事務(wù),b連接隨后開(kāi)啟事務(wù)并更新完,a提交事務(wù),把b的更新給淹沒(méi)
幻讀:a查詢表中共多少條數(shù)據(jù),之后b插入一條數(shù)據(jù),a再讀就會(huì)發(fā)現(xiàn)前后兩次不一致。
選擇隔離級(jí)別避免發(fā)生問(wèn)題
在spring中添加事務(wù)
聲明式事務(wù)
- 注解
- xml配置文件
編程式事務(wù)
TransactionTemplate 這種適合更細(xì)粒度的事務(wù)
代碼實(shí)戰(zhàn)
isolation 隔離級(jí)別
propagation 事務(wù)傳播
常用的三種:
- required
- required-new
- nested
解釋
required:a調(diào)用b,如果a有事務(wù),就按a的事務(wù)來(lái),沒(méi)有就創(chuàng)建事務(wù),b失敗回滾
required-new:a調(diào)用b,創(chuàng)建一個(gè)新事務(wù),并暫停外部事務(wù),就是說(shuō)不管a是夠成功,b都完成了
nested:如果存在外部事務(wù)a,則嵌套到外部事務(wù)中,a并有獨(dú)立的提交和回滾,b如果失敗則回滾,但a不一定,也就是說(shuō)a不管b成功與否,自己先完成再說(shuō),否則就和required-new一樣
如果事務(wù)中發(fā)生情況就不會(huì)插入成功
聲明式事務(wù)
@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
public void insert(){
User user = new User();
userService.insertUser(user);
int a=1/0;
}
編程式事務(wù)
public void insert(){
TransactionTemplate template = new TransactionTemplate();
template.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ);
template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
template.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus status) {
User user = new User();
userService.insertUser(user);
int a=1/0;
return null;
}
});
}
原文鏈接:https://blog.csdn.net/miss_na/article/details/123084821
相關(guān)推薦
- 2023-01-20 Python中用try-except-finally處理異常問(wèn)題_python
- 2022-09-17 docker安裝postgresql的圖文教程_docker
- 2022-05-05 C#?模式匹配完全指南_C#教程
- 2022-09-17 golang構(gòu)建工具M(jìn)akefile使用詳解_Golang
- 2022-04-18 python?numpy中對(duì)ndarry按照index增刪改查_(kāi)python
- 2023-04-10 Pytest斷言的具體使用_python
- 2022-07-22 數(shù)據(jù)庫(kù)常見(jiàn)約束
- 2022-04-27 jquery+css實(shí)現(xiàn)移動(dòng)端元素拖動(dòng)排序_jquery
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支