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