MySQL에서 단일 쿼리로 모든 열 이름을 소문자로 변환하기
데이터베이스를 운영하다 보면 테이블의 열(컬럼) 이름이 대소문자로 뒤섞여 있어 일관성을 위해 모두 소문자로 통일해야 할 때가 있습니다. MySQL에서는 information_schema.columns 시스템 뷰와 CONCAT() 함수를 조합하면 필요한 ALTER TABLE 문을 자동으로 생성해 손쉽게 처리할 수 있습니다.
1단계: 샘플 테이블 생성
먼저 대소문자가 혼합된 열 이름을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1
-> (
-> StudentFirstName varchar(20),
-> StudentLastName varchar(20),
-> StudentAge int,
-> StudentCountryName varchar(20)
-> );
Query OK, 0 rows affected (4.20 sec)
2단계: 열 이름을 소문자로 바꾸는 쿼리 작성
information_schema.columns에서 해당 데이터베이스('demo')의 모든 열을 조회한 뒤, CONCAT 함수로 ALTER TABLE ... CHANGE 구문을 동적으로 만들어냅니다. lower(column_name)이 기존 열 이름을 소문자로 변환하고, column_type은 원래의 데이터 타입을 그대로 유지해 줍니다.
mysql> select concat('alter table ', table_name, ' change `', column_name, '` `',
-> lower(column_name), '` ', column_type, ';')
-> from information_schema.columns where table_schema = 'demo';실행 결과 확인
쿼리를 실행하면 스키마 내 모든 테이블의 열에 대해 아래와 같은 ALTER TABLE 문이 문자열 형태로 출력됩니다.
+-----------------------------------------------------------------------------------------------------------------+
| concat('alter table ', table_name, ' change `', column_name, '` `', lower(column_name), '` ', column_type, ';') |
+-----------------------------------------------------------------------------------------------------------------+
| alter table demotable1 change `StudentFirstName` `studentfirstname` varchar(20); |
| alter table demotable1 change `StudentLastName` `studentlastname` varchar(20); |
| alter table demotable1 change `StudentAge` `studentage` int(11); |
| alter table demotable1 change `StudentCountryName` `studentcountryname` varchar(20); |
| alter table mytable change `MyEuroColumn` `myeurocolumn` varchar(5); |
+-----------------------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)
마무리: 생성된 쿼리 실행하기
출력된 ALTER TABLE 문을 그대로 복사해 실행하면 실제로 열 이름이 소문자로 변경됩니다. 문장이 많은 경우에는 결과를 파일로 저장한 후 일괄 실행하거나, 클라이언트 도구의 스크립트 실행 기능을 활용하면 편리합니다. 단, 운영 환경에서는 변경 전 반드시 데이터를 백업하고, 인덱스·외래 키·애플리케이션 코드에서 해당 열 이름을 참조하는 부분에 영향이 없는지 먼저 확인하는 것이 안전합니다.