Mysql8 新特性:DDL操作原子化以支持事务完整性

本文介绍了MySQL8.0中InnoDB表的DDL操作如何实现原子性,确保一条DDL语句要么全部成功,要么全部失败。与MySQL5.7相比,8.0在删除表操作时更具有事务完整性,即使遇到错误,也不会意外删除其他表。
摘要由CSDN通过智能技术生成

简单来说,就是DDL操作也支持原子性了。

在MySQL 8.0中,InnoDB表的DDL操作原子化以支持事务完整性,即一条DDL的SQL语句操作要么全部成功,要么全部失败,将DDL操作日志写入data dictionary数据字典表mysql.innodb_ddl_log中,用于回滚操作,该表是隐藏的表,通过show tables无法看到。通过设置参数,可将DDL操作日志打印输出到mysql错误日志中

演示说明MySQL 5.7和MySQL 8.0中DDL操作的区别:

操作方法,创建一个数据库,里面创建一个表,比如T1,然后执行删除表操作,删除的时候添加一张不存在的表,这个时候删除操作会报错,确认T1表是否会被删除。

MySQL 8.0中:drop table t1, t2; 报错了,但是t1表没有删除。这是因为在MySQL 8.0中DDL操作已经原子化,即一条DDL的SQL语句中的数据库操作要么都成功,要么都失败。

mysql> create table t1(i int);
Query OK, 0 rows affected (2.77 sec)

mysql> show tables;
+------------------+
| Tables_in_test01 |
+------------------+
| t1               |
| tb_student       |
+------------------+
2 rows in set (0.00 sec)

mysql> drop table t1, t2;
ERROR 1051 (42S02): Unknown table 'test01.t2'
mysql> show tables;
+------------------+
| Tables_in_test01 |
+------------------+
| t1               |
| tb_student       |
+------------------+
2 rows in set (0.00 sec)

如果在Mysql 5 版本,t1表是会被删除的。 这边没有安装相应Mysql,就不演示了。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值