MySQL-8.0.x DDL 原子性

1、mysql-8.0.x 新特性之 DDL 原子性

在没有 DDL 原子性之前 DBA 对 DDL 语句基本上是无能为力的,比如说 DDL 执行的过程中停电了,这下就只有天知道了。实现上最终的愿景还是希望得到一个确定的结果,要么成功了,要么失败了。mysql-8.0.x 带来了 DDL 原子性

2、mysql-5.6.x DDL 操作的表现

mysql-5.6.x 并不保证原子性,所以当我们一次 drop 多个表的时候就有可能遇到部分成功的情况

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 5.6.44    |
+-----------+
1 row in set (0.00 sec) -- mysql-5.6.44

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec) -- 库中只有一个表 t

mysql> drop table t,t_not_exists;
ERROR 1051 (42S02): Unknown table ‘tempdb.t_not_exists‘ -- 尝试一次删除多张表 t & t_not_exists

mysql> show tables;
Empty set (0.00 sec) -- 虽然 t_not_exists 表并不存在,但是 t 还是被删除了
        

3、mysql-8.0.x DDL 操作原子性

mysql-8.0.x 提供了原子性支持,保证了 DDL 操作要么全部成功、要么全部失败。

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.16    |
+-----------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)

mysql> drop table t ,t_not_exists;
ERROR 1051 (42S02): Unknown table ‘tempdb.t_not_exists‘
mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec) -- 因为对 t_not_exists 的操作失败了,所以整个 DDL 都回滚了;这也就解释了为什么 t 表还在。

4、mysql-5.7.x 也表现出了 DDL 原子性的支持

之所以说 5.7 是看起来像是支持 DDL 原子性,是因为在官方文档上并没有提到它支持,但是它表现了一些与 8.0 类似的行为能力。

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.7.26-log |
+------------+
1 row in set (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)

mysql> drop table t ,t_not_exists;
ERROR 1051 (42S02): Unknown table ‘tempdb.t,tempdb.t_not_exists‘
-- 两者在错误信息上还是有一定的差别
-- 8.0 会报 t_not_exists 表不存在
-- 5.7 会报 t 和 t_not_exists 都不存在

mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| t                |
+------------------+
1 row in set (0.00 sec)
            

引用自:https://www.sqlpy.com/blogs/books/1/chapters/12/articles/52

---

原文地址:https://www.cnblogs.com/JiangLe/p/11194441.html

时间: 2024-11-12 09:39:58

MySQL-8.0.x DDL 原子性的相关文章

What's New In MySQL 8.0

    由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gcc耗时较长,与测试目的不符.暂用官方rpm包安装.以便达到快速测试目的. 以下新功能介绍中,跟日常工作强相关大都经过测试.时间有限,未能面面俱到,有兴趣自行测试. 以下大部分来源自 https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html

【Mysql】- Mysql 8.0正式版新亮点

MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8.0 仅支持通过使用 in-place 方式进行升级,并且不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本).唯一受支持的替代方案是在升级之前对数据进行备份. 下面简要介绍 MySQL 8 中值得关注的新特性和

MySQL 2.0

MySQL 2.0 select 完整语句 写的顺序: select ... from... where.... group by... having... order by.. 执行顺序: from... where... group by... having.... select ... order by... 组函数 常用的组函数 AVG COUNT MAX MIN SUM 组函数的语法:(Group By) SELECT [column,]group_function(column),.

MySQL 8.0复制性能的提升(翻译)

What’s New With MySQL Replication in MySQL 8.0 MySQL复制从问世到现在已经经历了多个年头,它的稳定性和可靠性也在稳步的提高.这是一个不停进化的过程,由于MySQL的很多重要功能都是依赖于复制,所以复制的快速发展也是很容易理解的. 在MySQL的上一个版本当中,MySQL通过实现真正意义的并行复制将复制的性能提升到了一个新的层面,因为在MySQL 5.6的版本中,虽然号称是实现了并行复制,但是并行复制是schema级别的,即如果binlog row

MySQL 8.0新特性

一.MySQL 8.0中添加的功能 1.新的系统字典表 整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储 2.支持DDL 原子操作 InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作 3.安全和用户管理 新增caching_sha2_password认证插件,并且是默认的身份认证插件.性能和安全方面加强 权限支持role 新增密码

MySQL 8.0的十大新特性

今天,让我们看一下MySQL8.0提升数据库管理员工作效率的十大改进. 从一大堆特性你们找出十点并不太容易,以下是这十大特性: 1.临时表的改进 2.持续的全局变量 3.取消默认MyISAM系统表 4.UNDO空间回收 5.UTF8性能改进 6.取消Query Cache 7.原子DDL 8.更快.性能更好的Schema和Information Schema 9.角色管理 10.加密表空间中的REDO日志和UNDO日志都将被加密 临时表的改进 在MySQL5.7中,所有的临时表都被创建在一个叫"

MySQL 8.0.11 innodb cluster 运维管理手册之二--集群搭建

MySQL 8.0.11 innodb cluster 高可用集群部署运维管理手册之二 集群建设 作者 方连超 基础环境 系统:centos 7.5Mysql:8.0.11 二进制包Mysqlshell: 8.0.11 rpm 包Mysql router: 8.0.11 二进制包 架构: 192.168.181.101 myrouter1 Keepalived.MySQL-shell.MySQL-Router.MySQL-client 192.168.181.102 myrouter2 Keep

Mysql 8.0 新特性测试

Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Postgresql和Mariadb中早已存在role这个特性. create role role_test; grant select,insert,delete,update on zhongwc.tab01 to role_test; create user 'user1'@'%' identif

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M