MySQL中DDL操作是否支持事务

MySQL中DDL不支持事务。

  1. 传统MySQL(5.7及以前版本)
  • DDL操作不支持事务
  • 执行DDL操作时会隐式提交当前会话的事务
  • 无法回滚DDL操作
  1. MySQL 8.0版本
  • 引入了原子DDL特性(Atomic DDL)
  • DDL操作变为原子性的,要么全部成功,要么全部失败
  • 但这并不意味着DDL操作可以和普通DML操作放在同一个事务中
  • DDL操作仍然会导致前面的事务隐式提交

举例说明:

START TRANSACTION;
INSERT INTO users (name) VALUES ('Alice');  -- DML操作ALTER TABLE users ADD COLUMN age INT;       -- DDL操作-- 这里会自动提交前面的INSERT操作-- ALTER TABLE是原子性的INSERT INTO users (name, age) VALUES ('Bob', 25);  -- 新的事务开始
COMMIT;

需要注意的要点:

  1. DDL操作会自动提交之前的事务
  2. DDL操作本身具有原子性(在MySQL 8.0中)
  3. 不能在一个事务中混合DDL和DML操作并期望它们一起回滚

原因

MySQL中DDL不支持事务的主要原因有以下几点:

  1. 元数据锁定机制
  • DDL操作需要修改数据库的元数据(表结构、索引等)
  • 这些元数据存储在系统表空间中
  • 为了保证数据一致性,执行DDL时需要获取元数据锁(MDL锁)
  • 这种锁定机制与普通事务的锁定机制不兼容
  1. 文件系统操作
  • DDL操作往往涉及底层文件系统的改动
    • 例如:创建/删除表时需要创建/删除物理文件
    • 修改表结构时可能需要重建表文件
  • 文件系统操作通常不能像数据库事务那样简单回滚
  • 涉及到操作系统层面的文件操作,难以保证原子性
  1. 性能考虑
  • DDL操作通常比较耗时
  • 如果支持事务,就需要:
    • 保持长时间的锁定
    • 维护大量的日志信息
    • 占用更多的系统资源
  • 这会严重影响数据库的整体性能
  1. 实现复杂性
  • 需要维护额外的回滚日志
  • 需要处理各种边界情况
  • 需要协调多个系统组件(文件系统、锁管理器、日志系统等)
  • 实现成本高,容易引入新的bug
  1. 历史原因
  • 早期的MySQL设计就没有考虑DDL事务支持
  • 后续要添加这个特性需要对核心架构做大量改动
  • 可能影响现有功能的稳定性

这就是为什么即使在MySQL 8.0引入了原子DDL,也仅仅是保证了DDL操作本身的原子性,而不是完整的事务支持。

建议在实际使用中:

  1. 将DDL操作与普通业务操作分开执行
  2. DDL操作前做好备份
  3. 有条件的话使用在线变更工具(如gh-ost、pt-online-schema-change)
  4. 制定清晰的回滚方案
  5. 在执行DDL操作时,确保没有未提交的事务
  6. 不要依赖DDL的回滚功能
  7. 在进行架构变更时,最好在业务低峰期进行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14369.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…

amis组件crud使用踩坑

crud注意 过滤条件参数同步地址栏 默认 CRUD 会将过滤条件参数同步至浏览器地址栏中,比如搜索条件、当前页数,这也做的目的是刷新页面的时候还能进入之前的分页。 但也会导致地址栏中的参数数据合并到顶层的数据链中,例如:自动…

Baklib重塑内容中台智能推荐系统提高服务质量的策略和实操

内容概要 随着信息技术的飞速发展,企业在内容管理和用户体验方面面临越来越多的挑战。在这个大背景下,内容中台的智能化推荐系统应运而生,Baklib作为一个突出的工具,为企业提供了解决方案。Baklib 是什么类型的工具,它…

浅谈 HashMap 的扩容过程和 put 过程

这是在基于 JDK 1.8 之后的源码进行的浅谈 简介: 在 JDK 8 中,HashMap 由 “数组 链表 红黑树” 组成。链表过长会影响查询性能,而红黑树搜索的时间复杂度是 O(logn),而链表则是O(n),JDK 8 对数据结构进行了进一步的…

Unity-Mirror网络框架-从入门到精通之Discovery示例

文章目录 前言Discovery示例NetworkDiscoveryNetworkDiscoveryHUDServerRequestServerResponse最后前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Un…

25/2/7 <机器人基础> 牛顿-欧拉递推公式,开闭环

牛顿-欧拉递推公式是用于计算刚体动力学中,刚体的角速度和角加速度的递推关系。这个公式是牛顿第二定律和欧拉旋转定理的结合,适用于描述刚体在空间中的旋转运动。 对于一个刚体,设其在某时刻的角速度为 ω,角加速度为 α&#xf…

Qt实现简易视频播放器

使用Qt6实现简易音乐播放器,效果如下: github: Gabriel-gxb/VideoPlayer: qt6实现简易视频播放器 一、整体架构 该代码整体架构围绕着MainWindow类构建一个媒体播放器相关的应用程序。 主要组件 (一)界面组件&…

使用 JFreeChart 创建动态图表:从入门到实战

文章目录 前言一、JFreeChart 简介二、环境准备三、 创建第一个折线图四、自定义图表样式4.1 设置背景色4.2 设置折线颜色4.3 设置字体(解决中文乱码)4.4 设置横坐标的标签宽度和方向 五、导出图表六、实战:动态生成日报图表总结 前言 在数据…

Codeforces Round 940 (Div. 2) and CodeCraft-23(A-D)

题目链接:Dashboard - Codeforces Round 940 (Div. 2) and CodeCraft-23 - Codeforces A. Stickogon 思路 正多边形意味着要用相等的木棍,相等的木棍最少需要3根才能组成正三角,我们把相等的数的数量除3加起来 代码 void solve(){int n;…

C++开发(软件开发)常见面试题

目录 1、C里指针和数组的区别 2、C中空指针请使用nullptr不要使用NULL 3、http/https区别和头部结构? 4、有了mac地址为什么还要ip地址?ip地址的作用 5、有了路由器为什么还要交换机? 6、面向对象三大特性 7、友元函数 8、大端小端 …

常用数据结构之String字符串

字符串 在Java编程语言中,字符可以使用基本数据类型char来保存,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 操作字符串常用的有三种类:String、StringBuilder、StringBuffer 接下来看看这三类常见用…

wordpressAI工具,已接入Deepseek 支持自动生成文章、生成图片、生成长尾关键词、前端AI窗口互动、批量采集等

基于关键词或现有内容生成SEO优化的文章,支持多种AI服务(如OpenAI、百度文心一言、智谱AI等),并提供定时任务、内容采集、关键词生成等功能。 核心功能 文章生成 关键词生成:根据输入的关键词生成高质量文章。 内容…

Vite 为什么快,是怎么打包的

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

协议-ACLLite-ffmpeg

是什么? FFmpeg是一个开源的多媒体处理工具包,它集成了多种功能,包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成,其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…

【C++高并发服务器WebServer】-12:TCP详解及实现

本文目录 一、TCP通信流程二、套接字函数2.1 socket()2.2 bind()2.3 listen()2.4 accept()2.5 connect() 三、demo实现3.1 server端代码3.2 client端代码 四、TCP三次握手五、TCP滑动窗口六、TCP四次挥手七、多进程并发服务器 一、TCP通信流程 先来讲讲服务器端,是…

【Maven】项目管理工具-Maven

目录 1. Maven简介 1.1 项目管理 1.2 项目构建 1.3 项目构建工具 1.4 Maven的四大特征 1.4.1 依赖管理系统 1.4.2 多模块构建 1.4.3 一致的项目结构 1.4.4 一致的构建模型和插件机制 1.5 Maven模型 ​编辑 2.maven的安装配置 2.1 Maven的安装配置 2.1.1检测jdk的版…

dijkstra算法类型题解

dijkstra算法(有权图,无权图): 带权路径长度——当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度 初始化三个数组,final标记各顶点是否已找到最短路径,dist最…

RabbitMQ 消息顺序性保证

方式一:Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费,并将exclusive设置为true时,第二个消费者会抛出异常: com.rabbitmq.client.AlreadyClosedEx…

基于开源AI智能名片2+1链动模式S2B2C商城小程序的个人IP活动运营策略与影响力提升研究

摘要:本文围绕个人IP运营者借助活动运营提升影响力这一主题,深入探讨如何将开源AI智能名片21链动模式S2B2C商城小程序融入借势、造势、提升参与感及用户激励等活动运营环节。通过分析该创新模式与活动运营各要素的结合点,为个人IP运营者提供切…

计算机图形学论文 | 面向制造的设计: 五轴铣削的几何制造可行性评估

🍕🍕🍕宝子们好久不见,新年快乐~~~,今天我们来更新一篇关于五轴CNC制造中的模型制造可达性分析的论文。老规矩: 红色是名词,蓝色是结论,绿色是文章工作,黄色是一些其他重…