InnoDB undo日志实验
MySQL undo日志实验 背景:在学习undo日志时,看到一个观点: 对于update操作的undo日志,不更新主键的情况下: 如果被更新的列占用的存储空间未发生变化,则就地更新 如果被更新的列占用的存储空间发生改变,变大或变小,则先删除后插入,并且该删除时直接删除,而不是标记删除 因此本文浅浅实验下,在上述两种情况下的表空间变化,以及undo日志,并看下回滚是如何操作的。 环境 MySQL版本: mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.29 | +-----------+ 1 row in set (0.00 sec) 实验步骤概述 创建表使用varchar字段 添加记录,查看表空间该行数据 更新该记录,但是长度相同 查看表空间该行数据 查看undo日志内容 回滚更新操作,再次查看表空间 删除表重建 添加记录,查看表空间该行数据 更新该记录,但是长度变大 查看表空间该行数据 查看undo日志内容 回滚更新操作,再次查看表空间 删除表重建 添加记录,查看表空间该行数据 更新该记录,但是长度变小 查看表空间该行数据 查看undo日志内容 回滚更新操作,再次查看表空间 数据准备 create table test_undo( id int, name varchar(10), primary key (id) )engine=innodb charset=utf8 row_format=dynamic; 使用utf8编码,使用默认的dynamic行格式。 insert into test_undo values (1,'aaa'),(2,'xxx') 插入两条数据,这里为了区分先删除再插入和原地更新,需要插入两条数据,然后我们操作第一条。 mysql> select TABLE_ID from information_schema....