想必大家在版本更新迭代中,不免需要對資料庫表的欄位進行修改欄位類型或者長度的情況, 如果是修改存儲過程或者自定義函數, 那還是很好改的, 不用擔心表功能收到影響. 如果是改欄位呢? 首先要判斷欄位是不是已經在系統裡面, 沒有的話, 需要新增上去, 有的話, 需不需要修改? 其次, 腳本如果報錯, 是 ...
想必大家在版本更新迭代中,不免需要對資料庫表的欄位進行修改欄位類型或者長度的情況,
如果是修改存儲過程或者自定義函數, 那還是很好改的, 不用擔心表功能收到影響.
如果是改欄位呢?
首先要判斷欄位是不是已經在系統裡面, 沒有的話, 需要新增上去, 有的話, 需不需要修改?
其次, 腳本如果報錯, 是否會重覆執行一下腳本? 會不會導致別的問題呢? 看腳本裡面執行結果報了好多錯, 總覺得, 會被運維鄙視一遍. 做開發的, 真受不了別人鄙視自己的東西.
直接用sql去新增, 修改欄位, 好像不太行, 經常會有問題.
下麵就是提供腳本,可重覆升級
DELIMITER ?? DROP PROCEDURE IF EXISTS schema_change?? CREATE PROCEDURE schema_change() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '表名' AND column_name = '欄位名') THEN ALTER TABLE `表名` ADD COLUMN `欄位名` varchar(2000) NULL COMMENT '欄位名註釋'; ELSE ALTER TABLE `表名` MODIFY COLUMN `欄位名` varchar(2000) NULL COMMENT '欄位名註釋'; END IF; END?? DELIMITER ; CALL schema_change();
就跟java代碼中的if/else 判斷一樣的邏輯