【问题标题】:Transactional with ALTER TABLE. How to implement?使用 ALTER TABLE 进行事务处理。如何实施?
【发布时间】:2020-05-07 20:29:03
【问题描述】:

有一些查询组,包括创建表、字段等。如何实现一种机制,通过该机制应该全部执行一组请求,或者如果某个地方的错误被全部取消?也就是说,以 ALTER TABLE 查询为例(隐式提交)的事务性原则

【问题讨论】:

标签: mysql sql database transactions mariadb


【解决方案1】:

事务 DML 在 MySQL 8.0 之前是不可能的。在那个版本中,有一个存储在 InnoDB 表中的“数据字典”。 (我不想考虑所需的引导程序!)至少在理论上,DD 允许 ROLLBACK 的 DDL 操作,例如 ALTERDROP TABLE。研究 8.0 文档,看看它是否足以满足您的需求。

在过去(8.0 之前),许多 DML 操作至少是合理的“崩溃安全”。例如,ALTER 用于将表复制过来,然后快速换入新表。这提供了一种相当好的从ALTER 期间的崩溃中恢复的方法。

自 5.6 以来,ALTER 有了很多重大改进。在此之前,唯一真正“即时”的更改是在ENUM 中添加一个选项,这有一些警告。仍然有一些事情需要对表进行完整、耗时的重建——例如对 PRIMARY KEY 的任何更改。

应尽量减少 DML 操作;它们不是为频繁使用而设计的。

【讨论】:

    【解决方案2】:

    你在谈论提交和回滚。

    但是,如果您将普通 SQL 与 DML(CREATE/ALTER/DROP 等)混合使用,则 DML 命令在执行时会隐含 COMMIT,您无法避免它。因此,如果与正常的插入/更新/删除类型查询混合使用,这可能会给您带来问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2014-05-13
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多