MySQL只读事务到底有啥用?

很多人认为MySQL只读事务没啥用,有点鸡肋,以前我也这么认为,自从认真研究了事务的隔离级别和事务的并发问题后,发现这个只读事务其实并不是大家想象的那么无用。下面举一个实际开发中可能会遇到的例子来说明只读事务的作用。

展示用户列表的需求,后台从数据库查询用户列表返回给前端分页显示,分页通过数据库的分页功能实现,前端分页插件需要后台返回总共有多少条记录,以便渲染分页效果,后端返回的数据大概长这样:

{
	total:8, // 总共多少条记录
	list: [...] // 只包含当前页的记录
}

所以后台需要查询两次数据库:查询总数和查询列表。(有人会说,就不能全部查询出来再在代码里通过sublist分页吗?我这个例子里只有8条数据,万一有80万条数据呢,全部加载到内存不怕内存溢出吗?)

假设我先查询总数返回的是8条,然后在我查询列表前别的事务往数据表中插入了一条数据并commit了,结果我查询列表得到了9条数据。接着就在页面看到了神奇的一幕:总共8条数据,按照每页显示10条来分页,结果第一页有9条数据,这不是有毛病么?

是的,上述情景就是典型的不可重复读问题。我们都知道有个事务隔离级别叫“REPEATABLE READ”,此隔离级别可以实现可重复读,但是别忘了事务的隔离级别前提是要有事务啊,两个查询语句都没有处于事务中,还谈啥事务的隔离级别啊?还谈啥可重复读啊?这个我还真做过实验,就算事务的隔离级别是可重复读级别,两个查询语句没有处于事务中时,还是会出现不可重复读问题。

所以在REPEATABLE READ隔离级别下需要结合事务才能实现可重复读,而只读事务读写事务更高效,因为不需要写数据,所以做了一些优化。没错,只读事务就是这么来的。

还有人说只读事务不能进行写操作,这确实没错,但我认为不能写是结果而不是目的。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值