关于数据库的事务面试官会这么一直问下去

假如你是面试官你会怎么提问

1、首先肯定会问数据库事务的4个特性

ACID 原子性 一致性  隔离性 持久性  这个四个特性详细说明看这个博客即可

https://blog.csdn.net/qq_39521554/article/details/80240841  由于隔离性最为重要 也最难理解。

2、那么下面一个问题肯定会问数据库的隔离级别 也是4个

读未提交  事务最低的隔离级别,一个事务可以看到另外一个事务未提交的数据。

读提交     另外一个事务需要提交,我在我的事务才能看到。

可重复读  我不管其他事务对这笔数据如何做 我自己的事务看到的始终是一样的 这是mysql的默认事务隔离级别,额外插一句 如何实现的?两个字 视图。

串行化  必须等我干完 你才能接着干 很明显这个严重影响性能 很少有数据库这么干

从上到下 安全性能提高 但是并发性能降低  那么下面一个问题肯定就会问这几个隔离级别会造成什么问题

3、这几个隔离级别会造成什么问题,也就是说事务之间会有什么影响

脏读  脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的假如。另外一个事务未提交之前报异常回滚了 那么我读到的数据就不对了 比如一个事务在做张三给李四转账300元,此时还未提交,另外一个事务读取到李四已经增加了300元,而突然转账的那个事务突然报异常回滚了,因此此时就造成了数据的脏读

不可重复读  意味着在一个事务范围内多次相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。比如一个事务A查询张三余额是1000元 另外一个事务B给张三扣了300元  此时A事务继续查张三发现钱变成700了。

幻读 幻读顾名思义产生了幻觉 针对表数据的行数的增加或者减少。 比如A事务将所有用户账户清0 此时B事务往里面插入一个新的用户有余额的 这时候A事务再次查询发现 里面怎么还有没有被清空的 就像产生了幻觉一样。

4、那么接下来的问题就是讲一下之前的几种隔离级别事务之间分别有什么影响

读未提交    别的事务一改数据不管有没有commit我都能看到 因此        幻读  脏读 不可重复读 全中

读提交       别的事务一改数据只有commit我才能看到 因此        不存在脏读可能      但是会存在 幻读 不可重复读 

可重复读    因为自己的事务持有数据的一份拷贝(视图) 所以自己的事务看到的都是一样的 别的事务怎么修改不影响我 因此不存在脏读和不可重复读可能  但是会存在幻读可能 因为幻读是添加或者删除数据了 此时那份拷贝会发生变化(这里是我猜的哈哈哈哈哈有大牛解释一波吗)

串行化     这个就不要讲了吧 肯定不存在幻读 脏读 不可重复读  因为就我自己一个人玩啊 我锁住了 你们休想染指!

5、为了应付面试?不不不!看看实战场景吧

业务场景 只要仓库管理员将所有的装车单单明细更新成已发货 才生成承运单  数据库为mysql

更新状态接口是小刘同学写的  生成承运单接口是小张写的

那么在spring框架下面 肯定是小刘先更新 然后调用小张写的接口 每个service上面都加上@Transactional注解即可。

那么这样为什么就可以了 就要了解spring的事务传播机制  当一个事务接口调用另外一个时候 若事务注解无特别说明

默认在上一个事务环境里面  那么由于mysql是可重复读 又是在一个事务里面 自己update的状态自己再select当然可以了。

还有就是当你理解上述内容以后 你就能看懂事务注解的几个字段的意思了 而且和语言无关性 

其实上面还是有许多可以切入的点 

比如说 mysql为什么要使用可重复读作为默认事务隔离级别

https://blog.csdn.net/shudaqi2010/article/details/79958222

是如何通过多版本控制实现它的

https://blog.csdn.net/whoamiyang/article/details/51901888

spring事务传播的机制

https://blog.csdn.net/happydecai/article/details/80338053

声明式事务注解@transactional 是如何实现的  动态代理那几种方式 有什么区别?

https://blog.csdn.net/qq_42807370/article/details/87354522

等等等等 可以举一反三的地方实在太多太多  你不能只满足做个增删改查程序员!

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值