mysql 新增字段時判斷字段是否存在

一、問題引出

爲了保證數據的正確性,代碼的健壯性,咱們必須對一些邊界條件作一個判斷,因此纔會把修改表結構搞得如此複雜。mysql

mysql 新增字段時判斷字段是否存在,原本是一個很小的問題,由於之前都是使用 postgreSql、sqlserver ,上來就 if not exist ,結果mysql並不吃這一套,看看這段代碼:sql

 IF NOT EXISTS (
 SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = 't_subject' 
 AND COLUMN_NAME = 'subject_status'
 )THEN 
 ALTER TABLE t_subject ADD COLUMN `subject_status` int(1) DEFAULT '0' COMMENT '0:未被引用;1:已被用';
 END IF;

在 navicat執行時總出現錯誤,納悶啊............................函數


二、問題分析

網上查了不少,發現不能這樣直接執行腳本,那就沒辦法了,變態的寫法就是直接定義存儲過程,而後執行存儲過程,最後刪除存儲過程,看到這你是否是想呵呵了,不管怎樣,這最終是一種解決方法sqlserver


三、問題解決

// 建立存儲過程 名稱定義 以temp開頭意爲臨時的,Alter_Table_T_Subject 意爲修改T_Subject,20160411 意爲存儲過程建立的日期post

CREATE PROCEDURE Temp_Alter_Table_T_Subject_20160411()
    BEGIN
        IF NOT EXISTS (SELECT 1 
                FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE TABLE_NAME = 't_subject' 
                AND COLUMN_NAME = 'subject_status')
         THEN 
 ALTER TABLE t_subject ADD COLUMN `subject_status` int(1) DEFAULT '0' COMMENT '0:未引用;1:已被用';
         END IF;
    END

// 調用存儲過程spa

CALL Temp_Alter_Table_T_Subject_20160411()

// 刪除存儲過程code

DROP PROCEDURE Temp_Alter_Table_T_Subject_20160411;


四、真誠但願

但願有更好的方式,不然這個太變態了,我是否是還要寫一個函數,來判斷這個存儲過程是否已經存在了,我去太複雜了,真誠但願有更好的方式,能夠留言!server

相關文章
相關標籤/搜索