繁体   English   中英

MySQL的事务性DDL工作流程

[英]Transactional DDL workflow for MySQL

发现DDL语句( alter tablecreate index等)隐式提交MySQL中的当前事务,我有点惊讶。 来自MS SQL Server,在本地事务中进行数据库更改(然后回滚)的能力是我工作流程的重要部分。 对于持续集成,如果迁移因任何原因而被打扰,则使用回滚,这样至少我们不会使数据库处于半迁移状态。

在迁移和持续集成中使用MySQL时,人们如何解决这两个问题?

DDL语句会导致隐式提交,您无法对其进行任何操作。 没有办法阻止这种行为。

哪些DDL语句会导致此行为随时间发生变化,因此您需要检查您的版本。

5.1 http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html
5.5 http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html
5.6 http://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html

当我们只是扩展模式,新表/ columns / views / procs / etc,它们不会影响现有代码然后自动化就可以了,只需检查错误并修复它们。

当它们影响现有代码时,您需要根据具体情况制定策略。 由于没有回滚,您需要自己的退出计划,并且需要彻底测试。

因为它是个案,所以我可以提供很多帮助以满足您的特定情况。

一种可能性是以非破坏性方式进行DDL更改,其中包括:

  • DDL / DCL中的分离逻辑(+1反向全部)和DML
  • 只运行DDL / DCL脚本添加列,新表,..
  • 取决于结果:
    • 成功后,应用DML更改,
    • 如果失败,请应用反向DDL / DCL脚本删除第二步中要添加的内容(显然有一些错误“不存在”,具体取决于步骤1到达的程度)
  • 删除不再需要的东西,删除旧的列/表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM