暂无图片
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


请输入正文
提交
相关推荐
MYSQL5.7 的 直接复制到MYSQL8 ,显示为空?
回答 1
已采纳
元数据中没有,自然看不到。5.6这样是可以的。你要导出导入一下。一定可以。
MySQL的强同步复制和TDSQL的强同步复制到底有啥区别?
回答 1
已采纳
个人理解mysql强同步和tdsql强同步一样概念。但tdsql在增强半同步的基础上做了一些优化,比如并行传输binlog等。
msyql前导列索引问题
回答 3
已采纳
可以通过OPTIMIZERTRACE看看。应该走索引的“bestcoveringindexscan”:{“index”:“xxoo”,“cost”:0.35,“chosen”:true},MySQL5
多台机器连接MySQL数据库会引发锁的问题吗?
回答 1
已采纳
你是问会不会产生死锁吧,这个问题答案是即可能引发,也可能不会引发。锁背后的原因是阻止资源争抢,保证一致性。当发生了相互锁等待,死锁便产生了。所以光连接是不会产生死锁的,具体会不会产生是看你对数据库做的
MySQL5.6内存升高问题
回答 6
从日志里看不出来什么,这个日志是故障的时候抽取的吗。一般这样问题,都是跟缓存池,全局锁有关。建议升级版本。
Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
回答 8
是否有Tomcat在处理链接状态导致session没有释放的情况
MySQL double想存入****.**这种数据,怎么设置长度?
回答 1
已采纳
使用double(6,2)示例如下:mysql>createtablet(adouble(6,2));QueryOK,0rowsaffected(0.10sec)mysql>insertt
mysql的5.7和8.0的差别大吗?
回答 2
GPT的风格
有没有mysql简单能够生成 html格式的慢sql报告的方法或者脚本?
回答 2
这是简单啊设置产生LOGOUTPUT'TABLE' 然后使用MYSQL客户端参数HTML  输入SQL输出HTML
MySQL 只单主写,什么配置的服务器大概什么样的负载量?
回答 1
MySQL只单主写,什么配置的服务器大概什么样的负MySQL只单主写,服务器的负载量取决于多个因素,例如硬件配置、数据库表的设计和数据量等。一般来说,如果服务器的硬件配置较低,那么它的负载量也会相应较