众所周知MySQL的DDL语句是非事务的,即不能对DLL语句进行回滚操作,哪在事务中包含DDL语句会怎样呢?

如:

#禁用自动提交
set autocommit=off;
#创建tb1
create table tb1(id int auto_increment primary key,c1 int);
#开始事务
start transaction;
#插入数据
insert into tb1(c1) select 1;
insert into tb1(c1) select 2;
insert into tb1(c1) select 3;
#创建tb2
create table tb2(id int auto_increment primary key,c1 int);

这时候如果执行rollback,会发现插入到tb1中数据没有被回滚:

如果查看binlog:

在创建tb2之前,有一个commit操作将上面语句中的事务进行提交,因此虽然后面执行了rollback操作,但实际上rollback的是另外一个空事务,所以没有任何数据发生“回滚”。

=============================================================================

在执行研发同事提交的脚本时,应当将DDL和DML语句以及DCL语句严格分开,避免事务被隐性“破坏”,导致误操作情况发生。

比如你打开一个事务正在修改数据,恰好研发同事找你在这个库上新建一个表,剪完你发现自己数据改错了,此时再想回滚就悲剧啦!

又比如研发给你一个事务脚本,中间夹渣一个DDL语句,导致事务“中途”提交一次,等最后发现异常要回滚却发现只能回滚一部分。

=============================================================================

总结:

当执行到DDL语句时,会隐式的将当前回话的事务进行一次“COMMIT”操作,因此在MySQL中执行DDL语句时,应该严格地将DDL和DML完全分开,不能混合在一起执行。

=============================================================================

=============================================================================

转载于:https://www.cnblogs.com/TeyGao/p/7622155.html

MySQL--当事务遇到DDL命令相关推荐

  1. Redis的事务:相关命令 watch 与mysql事务的区别

    Redis事务的概念: Redis 事务的本质是一组命令的集合. 事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不 ...

  2. MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)

    MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...

  3. mysql mongodb 事务_MySQL PK MongoDB:多文档事务支持,谁更友好?

    原标题:MySQL PK MongoDB:多文档事务支持,谁更友好? 作者介绍 贺春旸,凡普金科DBA团队负责人,<MySQL管理之道:性能调优.高可用与监控>第一.二版作者,曾任职于中国 ...

  4. MySql的事务操作与演示样例

    事务就是一个逻辑工作单元的一系列步骤. 事务是用来保证数据操作的安全性 事务的特征: Atomicity(原子性) Consistency(稳定性,一致性) Isolation(隔离性) Durabi ...

  5. MySQL 之事务 及 其隔离级别

    MySQL 之事务 及 其隔离级别 /* 事务:表示一组操作(sql),要么同时成功,要么同时失败,那么这种操作就构成了一个事务. 例如: 张三 给 李四 转账 500元 (1)把张三的余额减少500 ...

  6. mysql数据库事务隔离级别演示

    mysql数据库事务隔离级别演示 关键词: 一.基本概念 二.事务的四个特性(ACID) 三.事务的用法 3.1 相关命令 3.2 使用步骤 四.数据库的隔离级别 五.示例演示(每组事务结束手动com ...

  7. 数据库-Mysql使用学习笔记(命令行及图形化界面)

    目录 环境及软件 安装目录 教程 启动Mysql服务 图形化 命令行 连接和断开服务器 图形化 命令行 SQL语句 介绍 分类 自带表介绍 注释 数据库的添加与删除 表的添加与删除 查询语法 基础查询 ...

  8. mysql执行事务的语句_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  9. mysql ef6 事务_使用事务-EF6 | Microsoft Docs

    使用事务Working with Transactions 10/23/2016 本文内容 备注 仅限 EF6 及更高版本 - 此页面中讨论的功能.API 等已引入实体框架 6.EF6 Onwards ...

  10. mysql+实例夯住的监控_Nagios 里面监控MySQL 监控事务夯住(RUNNING)报警通知

    序言: 业务报警订单提交异常,页面一直没有反应,排查后是事务没有提交或者回滚导致,想到如果及时监控事务的运行状态报警出来,那么就可以及时排查出问题所在,方便运营处理,所以自己就弄了一个shell脚本放 ...

最新文章

  1. 原创 | 浅议数据资产市场
  2. linux系统学习之vi编辑
  3. 你必须具有权限才能读取此对象_win10中随心所欲设置文件/文件夹访问权限,可以轻松做到,并不难...
  4. CentOS7.X中使用yum安装nginx完全教程
  5. iOS逆向之深入解析如何使用Theos开发插件
  6. Happy Birthday
  7. android root权限函数,android 4.4下app永久获取root权限的方法
  8. Scrum 冲刺博客集合
  9. vue 写门户网站_你不得不知道的Vue项目技巧
  10. 利用DataGrid的超级联接传值
  11. 【秒懂音视频开发】16_AAC解码实战
  12. 清明上河图密码2笔记
  13. oracle 财务云优势,Oracle ERP云助力财务团队提升业务弹性
  14. SpringCloud GateWay网关
  15. 「POJ2826」An Easy Problem?!【计算几何】
  16. 自动发送企业微信通知,让我来教你真的超简单
  17. 术语:游戏机制(Game Mechanics)
  18. Ambari添加快速链接Quick Links
  19. 【Python】爬取了近3000条单身女生的数据,究竟她们理想的择偶标准是什么?
  20. wangEditor 初始化设置行高、字体和字体大小

热门文章

  1. mysql通过centos本地命令行还原数据库出现乱码问题
  2. 每日一模式之数据库模式
  3. 转:Ajax与CustomErrors的尴尬
  4. Intel-VT 与虚拟化限制
  5. JavaScript 取得当前页面的URL网址参数
  6. 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
  7. 硬盘(U盘)被误格式化(删除),重要的文件如何恢复?
  8. 特别实用的几种SQL语句送给大家,让你的SQL高大上!
  9. 实用!Mybatis中trim标签的使用教程
  10. 一个三年Java程序员的面试总结!