2016-06-09 38 views
1

我在這裏有一個mysql腳本,它改變我的'Job'表並將DESCRIPTION列數據類型更改爲TEXT。但是,我將此腳本與所有其他腳本一起運行多次。 我的問題是,我需要添加到我的腳本,以便它將檢查DESCRIPTION列的數據類型是否已經是TEXT或不?由於大量數據,此腳本執行時間過長,如果DESCRIPTION列已更改爲TEXT,我不希望它再次執行。MYSQL通過檢查當前列數據類型修改列數據類型腳本

ALTER TABLE Job 
MODIFY DESCRIPTION TEXT; 

回答

1
SELECT 
    COLUMN_NAME, DATA_TYPE 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'YOUR_DB_NAME' 
AND 
    TABLE_NAME = 'YOUR_TABLE_NAME' 
AND 
COLUMN_NAME = 'YOUR_COLUMN_NAME'; 

這會給你問列的數據類型。

使用If條件可以運行您的alter table命令;

+0

這可以工作。儘管我將{TABLE_SCHEMA ='YOUR_DB_NAME'}替換爲{TABLE_SCHEMA = DATABASE()},以使其適用於我們所有的數據庫副本。我正在嘗試它。謝謝! – jbdeguzman

+0

太好了。希望它的作品:) @ jbdeguzman – shahmanthan9

+0

感謝您的回答。它有幫助。 :D – jbdeguzman

1

這就是我所做的。這是一個很長的路,但它的工作。它需要在存​​儲過程中。感謝您的幫助@ shahmanthan9。如果你們知道更好的方式,請在這裏發佈。謝謝!

DROP PROCEDURE IF EXISTS sp_JobUpdateDescriptionColumnType; 

CREATE PROCEDURE sp_JobUpdateDescriptionColumnType() 
    DETERMINISTIC 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    IF NOT EXISTS(SELECT NULL 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_SCHEMA = DATABASE() 
      AND TABLE_NAME = 'Job' 
      AND COLUMN_NAME = 'Description' 
      AND DATA_TYPE = 'text') 
    THEN 
     ALTER TABLE Job 
     MODIFY Description TEXT; 
    END IF; 
END; 

CALL sp_JobUpdateDescriptionColumnType; 

DROP PROCEDURE IF EXISTS sp_JobUpdateDescriptionColumnType;