💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 持续学习,不断总结,共同进步,活到老学到老
- 人生的本质是追寻自我的提升,包括思想、能力、意志等等。
- 直面变化,找到背后更基础的东西,更基础的东西是用户的需求。
- 我们的成功是我们的现在和将来决定的。今天和明天已经由昨天决定,你还可以决定后天。
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
Undo Log(撤销日志)是数据库管理系统中的另一个关键机制,用于支持事务的回滚和并发控制。在 MySQL 等数据库中,每个事务执行期间所做的修改操作除了被记录到重做日志(Redo Log)中,还会被记录到 Undo Log 中。
undo log 叫做回滚日志,用于记录数据被修改前的信息。他正好跟前面所说的重做日志所记录的相反,重做日志记录数据被修改后的信息。undo log 主要记录的是数据的逻辑变化,为了在发生错误时回滚之前的操作,需要将之前的操作都记录下来,然后在发生错误时才可以回滚。
Undo Log 的作用:
- 支持事务的回滚:当一个事务需要回滚(撤销)时,数据库可以利用 Undo Log 中的信息将事务所做的修改操作逆向执行,从而撤销该事务对数据所做的改变。
- 实现并发控制:当一个事务在执行期间,可能会读取其他事务正在修改的数据。为了确保事务的读取操作能够得到一致性的数据,数据库会将其他事务正在修改的数据版本记录到 Undo Log,这样在读取时,可以根据 Undo Log 中的数据版本来获取一个一致性的数据视图。
Undo Log 的工作原理:
- 在事务执行期间,如果进行了数据的修改(例如插入、更新、删除等),数据库会先将修改前的数据记录到 Undo Log 中,保留原始数据的一个副本。
- 当事务提交时,Undo Log 中的记录被保留,用于可能的回滚操作,以确保事务的原子性和一致性。
- 如果事务执行过程中发生错误,或者事务被回滚,数据库可以利用 Undo Log 中的信息将事务的修改操作逆向执行,从而回滚事务。
- 并发控制方面,当一个事务需要读取数据时,数据库会检查其他正在执行的事务是否已经修改过该数据。如果是,数据库可以通过 Undo Log 中的数据版本来提供给读取操作一个一致性的数据视图。
总结:
Undo Log 是数据库中用于支持事务回滚和实现并发控制的机制。它记录了事务执行过程中所做的数据修改操作的原始值,以便在事务回滚或提供一致性读取时使用。通过 Undo Log,数据库可以保证事务的原子性、一致性和隔离性。
除了回滚操作,undo log 的另一个作用是 MVCC,即在 InnoDB 存储引擎中 MVCC 的实现是通过 undo log 来完成。当用户读取一行记录时,若该记录已经被其他事务占用,当前事务可以通过 undo log 读取之前的行版本信息,以此实现非锁定读取。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙