MySQL的事务性DDL工作流程

sen*_*ett 16 mysql ddl continuous-integration transactions rollback

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

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

Dav*_*san 6

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
Run Code Online (Sandbox Code Playgroud)

当我们只是扩展架构、新表/列/视图/过程/等时,这不会影响现有代码,那么自动化就可以了,只需检查错误并修复它们。

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

由于这是具体情况而定,因此我无法为您的具体情况提供太多帮助。