MySQL为什么需要undo log
当更新一条数据,如果不提交事务,磁盘中的数据未更新前的数据,事务回滚,不更新数据不就好了吗
我来答
添加附件
收藏
复制链接
微信扫码分享

在小程序上查看
分享
添加附件
问题补充
3条回答
默认
最新
undo log有两个作用
1、一个用于实现事务ACID 中的A 用于事务回滚
2、一个用于ACID中的I 实现MVCC
mysql 中所有操作是在buffer pool中完成的
我们设想一个场景。 假如没有undo log
我 update 一个字段后,buffer pool中的数据就已变了
如果没有undo log 那么我下次从buffer pool中读这行数据的时候就读到了未提交的值了。


打赏 0

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


打赏 0
回答交流
Markdown
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
添加图片链接
上传图片
导航目录
Markdown语法参考
请输入正文
提示
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
