关于数据库里可重复读和幻读的问题。
有看到可重复读没有完全解决幻读,搜了一下没有找到一个合适的例子,现在有两种解释。
1.A 事务开始Select查询到一条数据,B 事务开始Insert一条数据,此时A事务进行了Update更新事务,A再次Select查询出现两条数据,出现幻读。(InnoDB存储引擎说可重复读解决幻读,这算是解决吗?)
2.A 事务开始Select查询到一条数据,B 事务开始Insert一条数据,此时A事务进行了Select还是一条数据,开一个C事务同样Select查询出现两条数据,出现幻读。(我感觉这个解释应该有问题吧)#数据库#
有看到可重复读没有完全解决幻读,搜了一下没有找到一个合适的例子,现在有两种解释。
1.A 事务开始Select查询到一条数据,B 事务开始Insert一条数据,此时A事务进行了Update更新事务,A再次Select查询出现两条数据,出现幻读。(InnoDB存储引擎说可重复读解决幻读,这算是解决吗?)
2.A 事务开始Select查询到一条数据,B 事务开始Insert一条数据,此时A事务进行了Select还是一条数据,开一个C事务同样Select查询出现两条数据,出现幻读。(我感觉这个解释应该有问题吧)#数据库#
全部评论
我好像理解了,是第一种,幻读需要在同一个事务中,所以开一个C事务是错误的。同时,关于InnoDB存储引擎里可重复读隔离解决幻读,A 事务开始Select查询到一条数据,B 事务开始Insert一条数据,此时A事务进行了Update更新事务,会将B事务里的版本修改(此时B事务是已经结束的),所以此时A事务Select出现幻读。但是举例是A 事务开始Select查询到一条数据,A事务进行了Update更新事务,B 事务开始Insert一条数据,此时B事务将会等待,原因是数据行附近被锁住了,A再次Select查询出现一条数据,A事务结束,B事务开始Insert。查询出现两条数据。
相关推荐
点赞 评论 收藏
分享
04-29 09:39
东北石油大学 光学工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-29 18:15
山东科技大学 运营 点赞 评论 收藏
分享