面试官:你连事务都不懂,就别来面试了

目录

 

什么是事务?

数据库事务的四个特性

数据库事务的4种隔离级别

Spring事务的传播特性

1.什么是传播特性?

2.spring支持7种事务传播特性:


什么是事务?

事务相当于是一组对数据库的操作(如SQL语句,可以是一条,也可以是多条),这一组操作必须全部完成,事务才算完成,若有其中一条操作没完成,则全部数据回滚.

 

数据库事务的四个特性

  1. 原子性,指事务包含的操作要么全部成功,要么全部回滚
  2. 一致性,数据执行前和执行后,数据都是一致的,如拿转账来说,A和B存的钱加起来是5000元,A和B不管转几次账,最后都是5000元.
  3. 隔离性,高并发情况下,会为每个用户都建一个事务,每个事务是独立运行,相互隔离的.
  4. 持久性,指事务提交完后,对数据库的改变是永久性的

 

数据库事务的4种隔离级别

  1. Read uncommitted,读未提交,就是可以读还没有提交完事务的数据,可能出现脏读。
  2. Read committed,读和提交,oracle数据库默认隔离级别,只能等事务提交完后才能读取数据,一段时间内事务重复读取时,可能出现不可重复读
  3. Repeatable read,重复读,mysql数据库默认隔离级别,就是若读数据事务开启了,不允许有其它修改操作(这里的修改说的是update,如果用户刚好用insert插入了数据,可能会出现幻读)
  4. Serializable,序列化,最高的事务隔离级别,这里的事务全是串行化的执行,所以不会有脏读,不可重复读,幻读问题,缺点是效率很低,耗数据库性能.

 

Spring事务的传播特性

1.什么是传播特性?

一般Service层的方法要开启事务,可以说是一个service方法对应一个事务,但Service中的方法可能还调用了其它service的方法,要分开建立事务?还是组在一起建立事务?这时可以用spring传播特性来解决

 

2.spring支持7种事务传播特性:

Propagation_REQUIRED,当前事务存在,则加入到当前事务中,没有则建立一个新的事务

Propagation_SUPPORTS,当前事务存在,则加入到当前事务中,没有则按非事务流程运行

Propagation_MANDATORY,强制只使用当前事务,没有则抛异常

Propagation_REQUIERD_NEW,每次都新建一个事务,若当前已存在一个事务,则把已存在的事务挂起.

Propagation_NOT_SUPPORTED,直接非事务方式执行,若当前存在事务,把存在的事务挂起

Propagation_NEVER,绝不开启事务,如果有当前事务存在会抛异常

Propagation_NESTED,如果当前存在事务,则在嵌套事务内执行,如果没有,则新建一个事务(若当前不存在事务,则和REQUIRED一样效果)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值