暂无图片
MySQL为什么需要undo log
我来答
分享
樱桃小丸子
2021-09-27
MySQL为什么需要undo log

当更新一条数据,如果不提交事务,磁盘中的数据未更新前的数据,事务回滚,不更新数据不就好了吗

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
chengang

undo log有两个作用
1、一个用于实现事务ACID 中的A 用于事务回滚
2、一个用于ACID中的I 实现MVCC

mysql 中所有操作是在buffer pool中完成的

我们设想一个场景。 假如没有undo log
我 update 一个字段后,buffer pool中的数据就已变了
如果没有undo log 那么我下次从buffer pool中读这行数据的时候就读到了未提交的值了。

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
2021-09-27
可以在连接里面开个内存 CHANGE BUF 跟SORT BUFFER 一样。就不需要UNDO
Uncopyrightable

undo log
保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
redo log
确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。(innodb存储引擎层)
binlog
保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。(mysql server层)

暂无图片 评论
暂无图片 有用 1
打赏 0
薛晓刚

关系型数据库除了pg都有undo或者类似的。
因为如果你改了一个数据,最后发现要撤销。那么就是一个回退的过程。由undo来完成。这只是其中一个场景。

暂无图片 评论
暂无图片 有用 1
打赏 0
2021-09-27
PG是多版本 本行多行
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏