
上QQ阅读APP看书,第一时间看更新
4.5 MySQL 8.0的新特性——DDL的原子化
在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,即DDL操作要么成功,要么回滚。DDL操作回滚日志写入data dictionary数据字典表mysql.innodb_ddl_log中用于回滚操作,该表是隐藏的表,通过show tables无法看到。通过设置参数可将DDL操作日志打印输出到MySQL错误日志中。
下面通过案例来对比不同的版本中DDL操作的区别。
分别在MySQL 5.7版本和MySQL 8.0版本中创建数据库和数据表,结果如下:

在MySQL 5.7版本中,测试步骤如下:
删除数据表bk1和数据表bk2,结果如下:

再次查询数据库中数据表的名称,结果如下:

从结果可以看出,虽然执行删除操作时报错了,但是仍然删除了数据表bk1。
在MySQL 8.0版本中,测试步骤如下:
(1)删除数据表bk1和数据表bk2,结果如下:

(2)再次查询数据库中数据表的名称,结果如下:

(3)从结果可以看出,数据表bk1并没有被删除。