数据库事务隔离级别问题

查看 365|回复 30
作者:leichnX   
可能我这个问题提的有点儿肤浅,大佬们别嘲笑。我有个疑问,可重读级别下,读的数据可能是个假的,是个老版本的,这到底有啥作用。
我再把这个疑问从两个方面细化一下
1. MySQL 可重读隔离级别下,A 事务在执行过程中,要多次使用某条记录,中途 B 事务已经对这条记录修改了,且提都提上去了。那么此时我这个 A 事务还有必要用旧数据往下走吗,走出来的结果能符合预期吗,或者我在哪些业务场景下比较适合要求这个记录每次读出来是一样的。
2.第二个方面,MySQL 中,A 事务在执行过程中,要多次使用某条记录,我怕它两次访问查出来结果不一样,反正都是同一条记录,我咋不只查一次,一直就用第一次查出来的。
buaasoftdavid   
我再把这个疑问从两个方面细化一下
1. MySQL 可重读隔离级别下,A 事务在执行过程中,要多次使用某条记录,中途 B 事务已经对这条记录修改了,且提都提上去了。那么此时我这个 A 事务还有必要用旧数据往下走吗,走出来的结果能符合预期吗,或者我在哪些业务场景下比较适合要求这个记录每次读出来是一样的。
2.第二个方面,MySQL 中,A 事务在执行过程中,要多次使用某条记录,我怕它两次访问查出来结果不一样,反正都是同一条记录,我咋不只查一次,一直就用第一次查出来的。
xlzyxxn   
可重读级别好处是可以大大提高数据库的并发。读的数据是假(旧)的概率不高,而且即使是假(旧)的,在一些应用下也不会对应用照成影响,在这样的应用下可重读的作用是巨大的。比如你 12306 定火车票的时候经常查询的时候余票有 1 张,但是付款的时候显示没有余票了。这个查询余票的功能就是可重复读,读到了假(旧)的数据也没事。最后下单的时候的隔离级别高就行。查询余票的隔离级别低可以让更多人同时去查询。
haython   
这就叫事务
leonshaw   
@buaasoftdavid 在 MySQL 中,4 个隔离级别中,可重复读级别性能排名第 3 ,除去”读未提交“和”串行化“这 2 个基本不会使用的级别,可重复读性能最差
waytodelay   
可重读并不是读的数据是假的或者老版本的,而是在事务中对同一个数据多次读取结果是一致的。
lichao   
可重读提高并发吗? RR 加的锁比 RC 多啊
@buaasoftdavid
k7262140   
这个要先申明是哪个数据库,例如 MySQL 和 PG 对可重复读的行为就不太一样
sigma65535   


abccccabc   
可重复读有两种读模式,一种快照读,一种当前读。不想读旧数据,用当前读
您需要登录后才可以回帖 登录 | 立即注册

返回顶部