事务可重复读的意义在哪?

发布于 2022-09-11 18:36:17 字数 643 浏览 13 评论 0

根据我所理解的,不可重复读是指在一个事务中对同一数据进行多次读取时,由于其他事务对该数据进行了更新,导致事务中多次读取的结果不一致;而可重复读就是即使其他事务对该数据进行了更新,该读事务多次读取的结果也是一致的。

这样的话我就有疑惑了:数据本身就被更新了,为什么还要保证多次读取的结果一致?这也只是表面上看上去一致的呀,实际都已经改变了,相反我个人还觉得不可重复读能够及时反映数据的变化,似乎更合理一些?那么可重复读的意义在哪呢?或者说不可重复读会有什么后果呢?

另外,还有个小问题:一个事务对数据进行了修改,但是还没有提交,那么这次修改是否真的生效了呢?虽然通过隔离级别能够设置为读已提交,但是我个人觉得隔离级别只是针对于一个事务而言的,而不会影响数据库本身,那么对于数据库本身来说,此次未提交的修改是否生效呢?

对于这个问题,我结合了一下其他的资料,说一下我的理解:关闭事务自动提交,事务开启后,会将事务开启前的数据信息保存在undo日志里面,事务执行中对数据的所有操作实际上都已经体现在数据库中了,即使没有提交,数据在数据库中也已经生效,这样说来,事务语句最后输入的commit只有表示事务结束的意思,真正的提交已经伴随着事务执行发生了,如果最终输入的是rollback,就会通过undo日志来将数据库中的被修改的数据恢复到初始状态,从而实现“回滚”。

不知道我的这种理解是否正确呢?望不吝赐教,十分感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滿滿的愛 2022-09-18 18:36:17

不可重复读很容易让人陷入一个思维定式那就是 我干嘛需要多次读取一个值 还要保证一致
要跳出这个思维看本质:我在事务中会不会受到其他事务的影响
举个简单的例子 数据校对(只是举个例子体现意思 不用太在意具体的业务)
我要取当前的余额 当前的账单 上个月的余额 我要检验一下数据对不对
我在事务中取了当前的账单和上个月的余额,好嘛,这时候又有新的订单提交了,我再获取余额是不是就不一致了?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文