我目前正在尝试确定如何通过mercurial commit hooks应用mysql数据库补丁。基本上,我有一个传入的提交钩子指向我的搜索路径中的一些脚本。这一切都有效。我真正的问题是如何保留一系列的mysql alter table语句,每当我拉(传入的mercurial hook)时都可以应用,当再次运行时不会出错。例如:
我向表中添加了一个新列。所以在我的altertables.sql中我添加了类似的内容:
ALTER TABLE `thecompany_tbl` ADD `firstLogin` INT NOT NULL DEFAULT '1';
我是第一次通过自动提交钩子运行它。工作良好。下次我拉,它会尝试再次运行,并产生类似:
#1060 - Duplicate column name 'firstLogin'
无论如何?如果我能保留一个包含所有改动的文件然后每次拉动时都应用它会很棒。谢谢你的建议!
答案 0 :(得分:1)
您需要更改脚本,以便在已经应用的情况下不进行更改。
This answer显示了如何检查列是否存在。
或者,您可以向数据库添加一个表,以包含脚本检查和更新的版本号。这可能更容易,因为另一个选项涉及使用不同的查询检查每种类型的更改。