MySQL如何保证事务内一直读到最新数据?

问题:当出现某些特殊场景,一个事务A需要在未提交之前,一定要读取的是事务B提交的最新数据,该如何处理?

在MySQL中,事务隔离级别:读未提交、读提交、可重复读、串行化。

一、读未提交

读未提交会读到其它线程未提交的脏数据,虽然可以一直读到数据,但大部分都是脏数据,所以无法保证是最新有效的数据。

二、读已提交

可以保证一直读取有效数据,但普通事务无法保证可重复读。

三、可重复读

可以对某些特殊业务进行加行锁,使用共享锁(lock in share mode)即可保证一直读取最新数据。

当事务A、事务B同时begin时且未commit时,事务B修改了数据,若这里事务A如果在未提交情况下想要读取到最新数据,可以使用lock in share mode进行加锁读取,但是需要事务B进行提交。

注意:就算在“可重复读”模式下,加锁也会导致当前线程读取最新数据,mysql在加任何锁(如共享锁lock in share mode,排它锁for update,delete)之前都会获取最新数据,MySQL乐观锁通过Update版本号就是用的排它锁原理(防止多个线程同时加版本号出现错乱)

四、串行化

可以实现一直读最新数据,但效率低下。

posted @   yifanSJ  阅读(269)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示