暂无图片
MySQL的undo有什么作用?
我来答
分享
2023-08-15
MySQL的undo有什么作用?

MySQL的undo有什么作用?

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

重做日志记录了事务的行为,可以很好地通过其对页进行”重做”操作,但是事务有时还需要进行回滚操作,这时就需要undo。 因此在对数据库进行修改时,InnoDB 存储引擎不但会产生redo,还会产生一定量的undo这样如果用户执行的事务或语句由于原因失败了,又或者用户用一条rollback 语句请求回滚,就可以利用这些undo 信息将数据回滚到修改之前的样子。

redo 存放在重做日志文件中,与redo 不同,undo 存放在数据库内部的一个特殊段(segment)中,这个段称为undo段 。undo 段位于共享表空间内。

undo是逻辑日志,因此只是将数据库逻辑地恢复到原来的样子。所有修改都被逻辑地取消了,但是数据结构和页本身在回滚之后可能大不相同。这是因为在多用户并发系统中,可能会有数十,数百甚至数千个并发事务。数据库的主要任务就是协调对数据记录的并发访问。比如,一个事务在修改当前一个页中某几条记录,同时还有别的事务在对同一个页中另几条记录进行修改。因此,不能将一个页回滚到事务开始的样子,因为这样会影响其他事务正在进行的工作。

undo 除了回滚操作,undo 的另一个作用是 mvcc,即在InnoDB 存储引擎中mvcc 的实现是通过undo 来完成。当用户读取一行记录时,若该记录已近被其他事务占用,当前事务可以通过undo 读取之前的行版本信息,以此实现 非锁定读取。

最重要的一点是,undo log 会产生redo log ,也就是undo log 的产生会伴随着redo log 的产生,这是因为undo log 也需要持久性的保护。

暂无图片 评论
暂无图片 有用 3
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
MySQL可以直接修改库名吗?
回答 2
已采纳
1、MySQL不能够直接修改数据库的名称;2、在MySQL5.1.23之前的旧版本中,可以使用RENAMEDATABASE来重命名数据库。MySQL5.1.23之后的版本,没有此命令;3、但可以通过先
table_io_waits_summary_by_table 这个表中具体字段的含义怎么在手册中没找到呢?
回答 1
https://dev.mysql.com/doc/refman/8.0/en/performanceschematablewaitsummarytables.htmlperformanceschem
分布式数据库中主机的信息存放在哪个表?
回答 1
A、host表
windows的mysql为什么安装完之后,打开这个C:\Program Files\MySQL\MySQL Server 5.7\my.ini 文件什么都不修改直接保存,就启动不了了?
回答 6
已采纳
你这个是msi安装包安装的目录。这个my.ini默认不是utf8格式的。如果你保存成utf8的就会报错。貌似要保存成默认的ansi格式试试。
MySQL读写分离,负载,这块目前用哪个中间件好一点?
回答 2
可以看下dble,是mycat的增强版,目前社区一直非常活跃。
MySQL的参照完整性通过什么方法实现?
回答 1
已采纳
参照完整性(ReferentialIntegrity)也称为引用完整性。参照完整性用于保证相关数据表中数据的一致性,进而保证主键和外键之间的关系总能得到维护。强制参照完整性可以通过以下方法实现:1)外
MySQL表结构,怎么输入A和B的值, 查询出 id 1?
回答 9
这个需要写一个函数来实现此功能。两个in参数,分别为A和B
ProxySQL支持一个账号管理多个MySQL实例吗?
回答 1
也不是完全不行,只是会比较复杂,还是建议使用不同用户名比如srvtestmysql001,这样更清晰便于管理。如果实在要配置,需要同时配置这三张表:mysqlusers/mysqlservers/my
MySQL应用现在是5.7,把数据导入到8.0会不会有问题?
回答 2
基本上没啥问题,可以看下官方的changeloghttps://dev.mysql.com/doc/relnotes/mysql/8.0/en/news8034.html注:如果存储过程有注释的话,导
MySQL支持的用户自定义完整性约束不包括
回答 4
已采纳
视图视图视图视图视图视图视图视图视图视图
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~