Mysql表结构升级_mysql表结构升级时根据字段是否存在执行相应操作
【問題描述】
某信息系統(tǒng),使用MYSQL做數(shù)據(jù)庫服務(wù),版本5.0.45,在準備對表結(jié)構(gòu)進行升級時,使用sql腳本對表結(jié)構(gòu)進行更改,包括增加列、更改列等操作,為防止重復運行升級腳本而出現(xiàn)錯誤,擬在進行alter?? table?? 之前檢測某一字段是否存在,如:
1、添加列,則要檢測該列是否存在,如果不存在才進行add操作,否則不執(zhí)行任何操作;
2、更改列,檢測該列是否存在,如果存在則更新,否則添加該列;
3、刪除列,檢測該列是否存在,存在才執(zhí)行操作
【初步實現(xiàn)方法】
1、編寫自定義函數(shù),檢測某個表或某個字段是否存在,從系統(tǒng)數(shù)據(jù)庫?? `information_schema`.`COLUMNS`?? 里查詢
2、編寫存儲過程,在其中調(diào)用該函數(shù)查詢某表或某表的某字段是否存在,并根據(jù)查詢結(jié)果執(zhí)行操作
【代碼示例】
[code=SQL]
DELIMITER?? $$
DROP?? FUNCTION?? IF?? EXISTS?? `db_waasai`.`CheckIsObjectExist`$$
CREATE?? FUNCTION?? `db_waasai`.`CheckIsObjectExist`(table_name?? VARCHAR(50),colume_name?? varchar(50))
RETURNS?? BOOLEAN
BEGIN
DECLARE?? t_count?? TINYINT?? UNSIGNED;
SELECT?? count(0)?? INTO?? t_count?? FROM?? information_schema.COLUMNS?? where?? TABLE_NAME=table_name?? &&?? (isnull(colume_name)?? ||?? colume_name= ' '?? ||?? COLUMN_NAME=colume_name);
RETURN?? t_count> 0;
END$$
DROP?? PROCEDURE?? if?? EXISTS?? `db_waasai`.`sp_update_106_107`?? $$
CREATE?? PROCEDURE?? `db_waasai`.`sp_update_106_107`()
BEGIN
IF?? NOT?? CheckIsObjectExist( 'tbl_user_card ', ' ')?? THEN
CREATE?? TABLE?? `tbl_user_card`?? (
`u_id`?? SMALLINT(6)?? UNSIGNED?? NOT?? NULL?? AUTO_INCREMENT,
`u_status`?? TINYINT(1)?? UNSIGNED?? DEFAULT?? '0 ',
`u_name`?? VARCHAR(20)?? NOT?? NULL,
PRIMARY?? KEY???? (`u_id`)
)?? ENGINE=MyISAM?? DEFAULT?? CHARSET=utf8?? CHECKSUM=1?? DELAY_KEY_WRITE=1?? ROW_FORMAT=DYNAMIC;
END?? IF;
IF?? NOT?? CheckIsObjectExist( 'tbl_user ', 'u_cards_num ')?? THEN
alter?? table?? `tbl_user`?? add?? column?? `u_cards_num`?? int?? (12)?? UNSIGNED???? DEFAULT?? '0 '?? NULL???? after?? `u_age`;
update?? `tbl_user`?? set?? `u_cards_num`=1;
END?? IF;
END$$
DELIMITER?? ;
CALL?? sp_update_106_107();
DROP?? PROCEDURE?? IF?? EXISTS?? `lsgw`.`sp_update_106_107`;
[/code]
【引玉】
這只是我實現(xiàn)目的的方法,之前也嘗試過用?? if?? exists?? 之類的,但是始終沒有成功,希望有朋友能夠提供更簡單、高效的方法
【說明】
示例代碼是根據(jù)實際運行成功的代碼改寫的,并不保證完全可用,hoho
修改了下,支持UBB
[code=SQL]
DELIMITER $$
DROP FUNCTION IF EXISTS `db_waasai`.`CheckIsObjectExist`$$
CREATE FUNCTION `db_waasai`.`CheckIsObjectExist`
總結(jié)
以上是生活随笔為你收集整理的Mysql表结构升级_mysql表结构升级时根据字段是否存在执行相应操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产生阻滞的问题 net4.6_识别左束支
- 下一篇: jboss mysql cluster_