数据库事务总结

13 篇文章 0 订阅
7 篇文章 0 订阅
ACID
  • 原子性:不可分割
  • 一致性:数据不被破坏(失败则会还原)
  • 隔离性:多种隔离级别,级别越高,一致性越强,并发越差
  • 持久性:事务成功,数据必须被持久化

最终目标:一致性

并发问题
  • 脏读:A事务读取B事务未提交的更改数据,并在这个数据基础上进行操作。
  • 不可重复读:同一事务中读到的同一数据不一致(其他事务并发修改or删除该数据提交)。
  • 幻读:同一事务中读到的同一数据不一致(其他事务新增数据提交)。
  • 第一类丢失更新:A先开启事务,B后开启修改后提交,A更新该数据失败后事务回滚至A开始前的状态,丢失B事务。
  • 第二类丢失更新:AB两个事务同时进行,修改同一个数据,后提交的事务覆盖先提交的事务,导致先提交的事务丢失。
数据库锁机制

按对象分:表锁,行锁。
按事务锁定关系:共享锁,独占锁。
深入:什么语句会触发什么锁。

事务隔离级别
隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
读未提交(Read uncommitted)可能可能可能
读已提交(Read committed)不可能可能可能
可重复读(Repeatable read)不可能不可能可能
可串行化(Serializable )不可能不可能不可能
  • 读未提交(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
  • 读已提交(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
  • 可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
  • 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

更多

事务传播行为(Spring)

PROPAGATION_REQUIRED
更多

Spring 手动事务

spring boot出来很久了,不推荐使用xml配置之类的,推荐注解形式事务:@Transactional(仅public方法和类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值