给定:MySQL 数据库。有时会推出 db 架构更改和更新(以 sql 脚本的形式)。为了保证应用更新的正确顺序(没有重复更新、没有更新丢失等),我计划部署以下解决方案:
- CREATE TABLE 元(名称 TEXT PRIMARY KEY,val TEXT);
- 插入元值('版本','0');
每个更新脚本都带有一个按顺序分配的版本 N。在执行更新之前,脚本会检查 meta.version 是否与之前的脚本版本 N-1 匹配。执行更新后,meta.version 更新为 N。我不需要防止多个脚本并行运行。
问题:如果不匹配,如何检查版本并中止脚本?我发现执行
CALL `raise error`
会破坏脚本,但是如何根据 meta.version 有条件地执行它?不允许存储过程。有意义的错误信息是一个加号。这没有提供合适的解决方案。