Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 모든 테이블의 열 이름을 소문자로 일괄 변경하는 방법

개요

MySQL에서 데이터베이스 내 모든 테이블의 열(컬럼) 이름을 소문자로 변경해야 할 때가 있습니다. 이럴 때 INFORMATION_SCHEMA.COLUMNS를 활용하면 각 테이블을 일일이 수정하지 않고도 ALTER TABLE 문을 한 번에 생성할 수 있습니다.

기본 구문

아래 쿼리는 INFORMATION_SCHEMA.COLUMNS에서 열 정보를 조회한 뒤, CONCAT 함수로 ALTER TABLE 문을 자동으로 만들어 줍니다.

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `',
LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') AS anyAliasName
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'yourDatabaseName';

예제 데이터베이스

실습을 위해 두 개의 테이블을 가진 bothinnodbandmyisam 데이터베이스를 사용합니다. 이 데이터베이스에는 다음과 같은 테이블이 있습니다.

  • employee
  • student

employee 테이블 구조 확인

mysql> desc employee;

실행 결과는 다음과 같습니다. EmployeeId와 EmployeeName처럼 대문자가 포함된 열 이름이 있는 것을 확인할 수 있습니다.

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| EmployeeId   | int(11)     | YES  |     | NULL    |       |
| EmployeeName | varchar(30) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

student 테이블 구조 확인

mysql> desc student;

마찬가지로 StudentId와 StudentName 열 이름에 대문자가 포함되어 있습니다.

+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| StudentId   | int(11)     | YES  |     | NULL    |       |
| StudentName | varchar(20) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

열 이름을 소문자로 변경하는 쿼리 실행

이제 실제 데이터베이스에 위 쿼리를 적용해 보겠습니다.

mysql> SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `', COLUMN_NAME, '` `',
   -> LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') AS changeColumnNameToLower
   -> FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'bothinnodbandmyisam';

쿼리를 실행하면 아래와 같이 각 열을 소문자로 변경하는 ALTER TABLE 문이 생성됩니다.

+------------------------------------------------------------------------+
| changeColumnNameToLower                                                |
+------------------------------------------------------------------------+
| ALTER TABLE employee CHANGE `EmployeeId` `employeeid` int(11);         |
| ALTER TABLE employee CHANGE `EmployeeName` `employeename` varchar(30); |
| ALTER TABLE student CHANGE `StudentId` `studentid` int(11);            |
| ALTER TABLE student CHANGE `StudentName` `studentname` varchar(20);    |
+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

결론 및 주의 사항

위 결과에서 확인할 수 있듯이, 모든 열 이름이 소문자로 변환된 ALTER TABLE 문이 자동으로 생성되었습니다. 이 출력 결과를 복사하여 그대로 실행하면 해당 데이터베이스의 모든 열 이름이 소문자로 변경됩니다.

다만 몇 가지 유의할 점이 있습니다. 첫째, CHANGE 절은 열 이름뿐 아니라 열 정의도 함께 지정해야 하므로, 인덱스나 기본 키, 외래 키가 걸려 있는 열은 추가 작업이 필요할 수 있습니다. 둘째, 대량의 테이블을 수정하기 전에는 반드시 데이터베이스를 백업한 후 진행하는 것이 안전합니다. 마지막으로, MySQL 서버 설정의 lower_case_table_names 옵션은 테이블 이름에만 영향을 미치며 열 이름에는 적용되지 않으므로, 열 이름의 일관성이 필요하다면 위 방법처럼 직접 변경해야 합니다.