考慮: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