我在這裏有一個mysql腳本,它改變我的'Job'表並將DESCRIPTION列數據類型更改爲TEXT。但是,我將此腳本與所有其他腳本一起運行多次。 我的問題是,我需要添加到我的腳本,以便它將檢查DESCRIPTION列的數據類型是否已經是TEXT或不?由於大量數據,此腳本執行時間過長,如果DESCRIPTION列已更改爲TEXT,我不希望它再次執行。MYSQL通過檢查當前列數據類型修改列數據類型腳本
ALTER TABLE Job
MODIFY DESCRIPTION TEXT;
我在這裏有一個mysql腳本,它改變我的'Job'表並將DESCRIPTION列數據類型更改爲TEXT。但是,我將此腳本與所有其他腳本一起運行多次。 我的問題是,我需要添加到我的腳本,以便它將檢查DESCRIPTION列的數據類型是否已經是TEXT或不?由於大量數據,此腳本執行時間過長,如果DESCRIPTION列已更改爲TEXT,我不希望它再次執行。MYSQL通過檢查當前列數據類型修改列數據類型腳本
ALTER TABLE Job
MODIFY DESCRIPTION TEXT;
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命令;
這就是我所做的。這是一個很長的路,但它的工作。它需要在存儲過程中。感謝您的幫助@ 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;
這可以工作。儘管我將{TABLE_SCHEMA ='YOUR_DB_NAME'}替換爲{TABLE_SCHEMA = DATABASE()},以使其適用於我們所有的數據庫副本。我正在嘗試它。謝謝! – jbdeguzman
太好了。希望它的作品:) @ jbdeguzman – shahmanthan9
感謝您的回答。它有幫助。 :D – jbdeguzman