2016-06-09 3 views
1

여기 내 '작업'테이블을 변경하고 DESCRIPTION 열 데이터 형식을 TEXT로 변경하는 mysql 스크립트가 있습니다. 그러나이 스크립트는 때때로 여러 번 실행되는 다른 모든 스크립트와 함께 사용됩니다. 내 질문은 설명 열의 데이터 형식이 이미 TEXT인지 여부를 확인하기 위해 스크립트에 추가해야하는 것은 무엇입니까? 이 스크립트는 거대한 데이터 때문에 실행하는 데 너무 오래 걸리고 설명 열이 이미 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()} (으)로 바꾸어 모든 DB 사본에서 작동하도록했습니다. 나는 지금 그것을 시도하고있다. 감사! – 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;