MySQL의 ENUM(열거형) 타입에서 특정 값을 제거하려면 ALTER 명령어를 사용해야 합니다. 이 글에서는 실제 예제를 통해 ENUM 값 삭제 과정을 단계별로 살펴보겠습니다.
1. 테스트용 테이블 생성
먼저 ENUM 컬럼을 포함하는 테이블을 생성합니다.
mysql> create table DemoTable
(
`Rank` ENUM('LOW','MEDIUM','HIGH')
);
Query OK, 0 rows affected (0.52 sec)
2. 테이블 구조 확인
DESC 명령어로 현재 테이블 구조를 확인해 보겠습니다.
mysql> DESC DemoTable;
실행 결과는 다음과 같습니다.
+-------+-----------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------------+------+-----+---------+-------+
| Rank | enum('LOW','MEDIUM','HIGH') | YES | | NULL | |
+-------+-----------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
3. ALTER 명령으로 ENUM 값 제거하기
ENUM에서 'MEDIUM' 값을 제거하려면 ALTER TABLE 문과 CHANGE 절을 사용해 컬럼 정의를 다시 지정하면 됩니다. 이때 유지하고 싶은 값만 나열하면 나머지 값은 자동으로 제거됩니다.
mysql> alter table DemoTable change `Rank` `Rank` ENUM('LOW','HIGH');
Query OK, 0 rows affected (1.19 sec)
Records: 0 Duplicates: 0 Warnings: 04. 변경 결과 확인
테이블 구조를 다시 확인하면 'MEDIUM'이 성공적으로 제거된 것을 볼 수 있습니다.
mysql> DESC DemoTable;
+-------+--------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| Rank | enum('LOW','HIGH') | YES | | NULL | |
+-------+--------------------+------+-----+---------+-------+
1 row in set (0.00 sec)
주의 사항
ENUM 값을 제거할 때는 다음 사항을 반드시 고려해야 합니다.
- 제거하려는 값이 이미 데이터로 저장되어 있는 행이 있다면 문제가 발생할 수 있습니다. STRICT 모드가 활성화된 환경에서는 해당 값이 존재할 경우 ALTER 작업이 실패합니다.
- 안전하게 작업하려면 먼저
SELECT로 해당 값이 사용 중인지 확인한 후, 필요하다면 기존 데이터를 다른 값으로 업데이트하는 것이 좋습니다. - ENUM 값의 내부 인덱스는 정의 순서에 따라 결정되므로, 기존 값들의 순서를 그대로 유지하는 것이 권장됩니다.
이처럼 ALTER TABLE ... CHANGE 구문을 활용하면 MySQL ENUM 타입의 값을 간단하고 안전하게 수정할 수 있습니다.