数据库/Spring事务那点事

事务的基本要素(ACID):

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

事务的并发问题:

脏读:事务A读取事务B更新的数据后,事务B进行了回滚操作,那么事务A读到的数据就是脏数据

不可重复度:事务A多次读取同一数据,事务B在事务A读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。

幻读:一个事务在前后两次查询同一范围的时候,后一次查询到了前一次查询没有看到的行

数据库事务隔离级别:
  • 数据库默认隔离级别: mysql ---repeatable,oracle,sql server ---read commited

  • mysql binlog的格式三种:statement,row,mixed

  • 为什么mysql用的是repeatable而不是read committed:在 5.0之前只有statement一种格式,而主从复制存在了大量的不一致,故选用repeatable

  • 为什么默认的隔离级别都会选用read commited 原因有二:repeatable存在间隙锁会使死锁的概率增大,在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行

  • 在RC级用别下,主从复制用什么binlog格式:row格式,是基于行的复制!

事务隔离级别

脏读

不可重复读

幻读

锁方式

读未提交(read-uncommitted)

无锁

不可重复读(read-committed)

行锁

可重复读(repeatable-read)

查询列有索引:行锁+间隙锁

查询列无索引:表锁

串行化(serializable)

表锁

Spring 事务隔离级别:
  •   ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应。

  •   ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

  •   ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。

  •   ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

  •   ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

Spring 事务的传播属性:
  • Propagation.REQUIRED:默认的事务传播级别,它表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

  • Propagation.SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

  • Propagation.MANDATORY:(mandatory:强制性)如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

  • Propagation.REQUIRES_NEW:表示创建一个新的事务,如果当前存在事务,则把当前事务挂起。也就是说不管外部方法是否开启事务,Propagation.REQUIRES_NEW 修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。

  • Propagation.NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

  • Propagation.NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

  • Propagation.NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 PROPAGATION_REQUIRED。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值