考虑:MySQL数据库。有时,数据库模式更改和更新将推出(以sql脚本的形式)。为了保证应用(没有重复的更新,没有更新丢失等)更新的正确顺序我计划部署以下解决方案:中止MySQL的脚本有条件
- CREATE TABLE元(名字TEXT PRIMARY KEY,VAL TEXT);
- INSERT INTO元VALUES( '版本', '0');
每个更新脚本执行其被顺序地分配一个版本N。在执行更新之前,脚本会检查meta.version是否与之前的脚本版本N-1相匹配。执行更新后,meta.version更新为N.我不需要防止多个脚本并行运行。
的问题:如何检查版本并中止脚本,如果它不匹配?我想到执行
CALL `raise error`
会打破脚本,但如何有条件地执行它取决于meta.version?不允许存储过程。有意义的错误信息是一个优点。 This不提供合适的解决方案。
是的,这是完美的包装脚本,但然后我需要确保每个人都使用这个包装脚本的更新。当然,这不会奏效。我需要“automagic”解决方案 - 无论是sql更新脚本还是不行。 – ygrek 2010-01-06 10:35:36
怎么样然后http://stackoverflow.com/questions/773889/way-to-abort-execution-of-mysql-scripts-raising-error-orhaps/1275431#1275431 – 2010-01-06 10:51:28
非常可怕:) 看起来像是有没有“直接”的解决方案.. – ygrek 2010-01-11 10:43:42