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
---
MySQL-8.0.x DDL 原子性的更多相关文章
- 详谈 MySQL 8.0 原子 DDL 原理
柯煜昌 青云科技研发顾问级工程师 目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验. 文章字数 3800+,阅读时间 15 分钟 背景 MySQL 5.7 的字 ...
- MySQL 8.0支持DDL原子化
在MySQL 5.5/5.6/5.7版本中,DDL操作是非原子型操作,在执行过程中遇到实例故障重启,可能导致DDL没有完成也没有回滚.如 1.执行DROP TABLE T1,T2操作,实例重启恢复后, ...
- MySQL8.0 DDL原子性特性
1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发 ...
- MySQL8.0 原子DDL
Edit MySQL8.0 原子DDL 简介 MySQL8.0 开始支持原子 DDL(atomic DDL),数据字典的更新,存储引擎操作,写二进制日志结合成了一个事务.在没有原子DDL之前,DROP ...
- What's New In MySQL 8.0
由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gc ...
- MySQL 8.0 InnoDB新特性
MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...
- mysql 8.0 ~ innodb与变量优化
一 innodb的优化 1 已完全不支持myisam引擎 2 将自增主键的计数器持久化到redo log中.每次计数器发生改变,都会将其写入到redo log中.如果数据库发生重启,InnoDB ...
- MySQL 8.0 —— 数据字典
1.简介 MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件.非事务性存储引擎表中.本文将会介绍M ...
- 关于MySQL 8.0的几个重点【转】
转自 关于MySQL .0的几个重点,都在这里 https://mp.weixin.qq.com/s/QUpk9uuS2JTli1GT6HuORA 一.关于MySQL Server的改进 1.1 re ...
随机推荐
- 关于spring boot上手的一点介绍
在spring官网网址 https://spring.io/guides 下,有许多相关介绍,包括可以构建的例子程序. 使用intellij idea,可以通过新建 spring boot initi ...
- linux用户组相关,密码相关,文件操作,和启动级别
一.开机重启和用户切换 注意,当关机或重启前,都应当先执行一下sync指令,把内存的数据写入磁盘,防止数据丢失. shutdown命令 shutdown -h now :立即关机 shutdown - ...
- 【洛谷5492】[PKUWC2018] 随机算法(状压DP)
点此看题面 大致题意: 用随机算法求一张图的最大独立集:每次随机一个排列,从前到后枚举排列中的点,如果当前点加入点集中依然是独立集,就将当前点加入点集中,最终得到的点集就是最大独立集.求这个随机算法的 ...
- PHP 核心特性 - 错误处理
错误与异常 错误,可以理解程序本身的错误,例如语法错误.而异常则更偏向于程序运行不符合预期或者不符合正常流程:对于 PHP 语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑. 例 ...
- 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能
最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...
- eclipse的一些常用快捷键
掌握了eclipse快捷键功能,能够大大提高开发效率. 这里总结一些eclipse的常用快捷键. 编辑相关快捷键 1. [ALT+/]:此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不 ...
- 读后感:数据结构与算法JavaScript描述
本书看完,对常见的数据结构与算法从概念上有了更深入的理解. 书中关于数组.栈和队列.链表.字典.散列.集合.二叉树.图.排序.检索.动态规划.贪心算法都有详细的介绍.算是一本不错的学习书籍. 栈和队列 ...
- PostgreSQL 表字段起别名
使用Postgreq Sql 表字段起别名时注意要用双引号,使用单引号会出现语法错误,执行结果如图
- echarts 柱状图+折线+文字倾斜及省略
效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- JS基础语法---对象总结
* 编程思想: * 面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程 * 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果 * ...