在Mysql中有条件地应用ALTER语句

时间:2011-07-07 18:04:04

标签: mysql

我有一个正在积极开发的mysql数据库。拥有一个带有自创建以来所做更改列表的alter.sql文件会很不错。有没有办法有条件地应用ALTER语句?

3 个答案:

答案 0 :(得分:1)

我的一个想法是使用MySQL Workbench的逆向工程功能。该选项位于“数据库”菜单上。您可以使用它在某个时间点为您的数据库生成脚本。然后,您可以再次运行它以生成另一个脚本。您可以对这两个脚本进行区分,以查看更改的内容。

我非常喜欢分散文件的一个工具是DiffMerge

但是我不知道有哪种方法可以自动生成这样的脚本来为你提供更改,我认为你必须使用一些工具组合并稍微调整一下。

注意,您可以阅读有关逆向工程MySQL DB here的更多信息。

修改 您可以做的另一件事是编写一个存储过程,该过程运行动态SQL以更改表并添加所需的列,如果列已存在则忽略任何错误。我不确定这是否可以在MySQL中使用,因为我不经常使用它。

通常,您通常需要跟上修改数据库的脚本。我们店里一直遵循的模式是我们拥有Dev,QA,UAT和Prod环境。在升级到QA或UAT时,您需要具有修改表等所需的DB脚本,以使DB达到当前级别,以支持您所做的任何代码更改。

答案 1 :(得分:0)

如果您正在讨论添加列,则可以执行该语句并在列已存在时允许它失败。对于任何更复杂的事情,您可能需要滚动自己的脚本。如果您将此数据库视为Web应用程序的一部分,则通常的方法是使用迁移,它将数据库更改与代码一起存储。

您从某个版本的应用程序开始使用完整架构,当代码更改需要更改数据库时,将数据库更改为新状态所需的任何SQL命令都会与代码一起存储(通常还会附带一个附加语句)如有必要,将恢复更改。

答案 2 :(得分:0)

查看Liquibase

这是自动化数据库更改的一个非常好的解决方案。简而言之,它确定了针对任何数据库运行的更新(可以是任何sql),并且仅应用尚未应用的更改。您可以检查代码库中的脚本,这是将数据库更改从测试迁移到生产的绝佳方法。如果需要,它还可以满足前提条件和回滚。

我强烈推荐它使用它。另一种方法是让dbadmins在alter statement上手动冒汗,并且不可避免地会出错。