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 原子性的更多相关文章

  1. 详谈 MySQL 8.0 原子 DDL 原理

    柯煜昌 青云科技研发顾问级工程师 目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验. 文章字数 3800+,阅读时间 15 分钟 背景 MySQL 5.7 的字 ...

  2. MySQL 8.0支持DDL原子化

    在MySQL 5.5/5.6/5.7版本中,DDL操作是非原子型操作,在执行过程中遇到实例故障重启,可能导致DDL没有完成也没有回滚.如 1.执行DROP TABLE T1,T2操作,实例重启恢复后, ...

  3. MySQL8.0 DDL原子性特性

    1. DDL原子性概述 8.0之前并没有统一的数据字典dd,server层和引擎层各有一套元数据,sever层的元数据包括(.frm,.opt,.par,.trg等),用于存储表定义,分区表定义,触发 ...

  4. MySQL8.0 原子DDL

    Edit MySQL8.0 原子DDL 简介 MySQL8.0 开始支持原子 DDL(atomic DDL),数据字典的更新,存储引擎操作,写二进制日志结合成了一个事务.在没有原子DDL之前,DROP ...

  5. What's New In MySQL 8.0

        由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gc ...

  6. MySQL 8.0 InnoDB新特性

    MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...

  7. mysql 8.0 ~ innodb与变量优化

    一  innodb的优化  1 已完全不支持myisam引擎  2 将自增主键的计数器持久化到redo log中.每次计数器发生改变,都会将其写入到redo log中.如果数据库发生重启,InnoDB ...

  8. MySQL 8.0 —— 数据字典

    1.简介 MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件.非事务性存储引擎表中.本文将会介绍M ...

  9. 关于MySQL 8.0的几个重点【转】

    转自 关于MySQL .0的几个重点,都在这里 https://mp.weixin.qq.com/s/QUpk9uuS2JTli1GT6HuORA 一.关于MySQL Server的改进 1.1 re ...

随机推荐

  1. VSCode+C++环境搭建

    date: 2019-10-05 VSCode+C++环境搭建 其实并不完整,毕竟我也只是一个OIer,并不会很高深的东西.(众所周知,OIer主业是软件开发) 安装VSCode 下载安装包 这个很简 ...

  2. 06-Node.js学习笔记-创建web服务器

    创建web服务器 //引用系统模块 const http = require('http'); //创建web服务器 //用于处理url地址 const url = require('url'); c ...

  3. 【西北师大-2108Java】第十二次作业成绩汇总

    [西北师大-2108Java]第十二次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第14周学习指导及要求 实验目的与要求 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本 ...

  4. IT兄弟连 HTML5教程 CSS3揭秘 CSS选择器2

    4  结构性伪类选择器 在学习结构性伪类选择器之前,先了解两个概念:伪类选择器和伪元素选择器.伪类选择器是CSS中已经定义好的选择器,不能随便命名.常用的伪类选择器是使用在a元素上的几种,如a:lin ...

  5. 【转载】【PAT】PAT甲级题型分类整理

    最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...

  6. Nginx图片防盗链配置

    如果我们自己网站内的图片资源被其它网站所盗用,这会增加自己网站的带宽资源,增加很多额外的消耗,而且会对我们系统的稳定性有影响,为了防止自己网站上的图片资源被其它网站所盗用,我们需要给自己的服务器配置防 ...

  7. 【ASP.NET Core学习】基础

    新建项目时,程序入口调用CreateDefaultBuilder(args),下面是源代码 public static IHostBuilder CreateDefaultBuilder(string ...

  8. Python进程池multiprocessing.Pool的用法

    一.multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiproce ...

  9. flex三个对齐属性的记忆方式

    今天在群里聊天有人说 flex的那几个居中属性好难记,时不时都要尝试一下,或者查看一下文档,现在我把我自己的记忆方式分享一下... 1. flex的居中主要是通过这三个属性来实现的: justify- ...

  10. Jupyter Notebooks 配置

    重装了三遍(破音) 一.首先进行Anaconda的下载 然后安装,将环境配置到系统变量上,如下 然后,打开 windows 的终端,检查是否配置成功 conda -V 然后就可以开始 Jupyter ...