MySQL에서는 테이블을 생성할 때 특정 컬럼에 ENUM 타입을 지정하여 미리 정의된 값들만 저장되도록 제한할 수 있습니다. 이 글에서는 ENUM 컬럼을 만들고, 데이터를 삽입한 뒤, ENUM 값을 기준으로 레코드를 조회하는 전체 과정을 예제와 함께 살펴보겠습니다.
1. ENUM 컬럼이 포함된 테이블 생성
먼저 학생 점수와 상태를 저장할 테이블을 생성합니다. StudentStatus 컬럼에는 'First', 'Second', 'Fail' 세 가지 값만 허용하도록 ENUM 타입을 설정합니다.
mysql> create table DemoTable2019
-> (
-> StudentMarks int,
-> StudentStatus ENUM('First','Second','Fail')
-> );
Query OK, 0 rows affected (1.75 sec)
2. INSERT 명령으로 레코드 삽입
테이블 생성이 완료되면 INSERT 명령을 사용해 샘플 데이터를 입력합니다.
mysql> insert into DemoTable2019 values(96,'First');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable2019 values(28,'Fail');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable2019 values(45,'Second');
Query OK, 1 row affected (0.19 sec)
ENUM 컬럼의 장점 중 하나는 허용 목록에 없는 값을 입력하려고 하면 MySQL이 오류를 반환한다는 점입니다. 이를 통해 데이터 무결성을 자연스럽게 유지할 수 있습니다.
3. SELECT 문으로 전체 레코드 조회
저장된 모든 레코드를 확인하기 위해 SELECT 문을 실행합니다.
mysql> select *from DemoTable2019;
실행 결과는 다음과 같습니다.
+--------------+---------------+
| StudentMarks | StudentStatus |
+--------------+---------------+
| 96 | First |
| 28 | Fail |
| 45 | Second |
+--------------+---------------+
3 rows in set (0.00 sec)
4. ENUM 컬럼 값을 활용한 조건 조회
다음은 ENUM 컬럼 값을 기준으로 특정 레코드를 조회하는 쿼리입니다. 점수가 28점인 학생을 찾고, 상태값으로 정렬하여 첫 번째 결과만 반환합니다.
mysql> select *from DemoTable2019
-> where StudentMarks=28
-> order by StudentStatus limit 1;
실행 결과는 다음과 같습니다.
+--------------+---------------+
| StudentMarks | StudentStatus |
+--------------+---------------+
| 28 | Fail |
+--------------+---------------+
1 row in set (0.00 sec)
정리
ENUM 타입은 성적 등급, 주문 상태, 사용자 권한처럼 값의 종류가 고정적인 경우에 매우 유용합니다. 테이블 생성 시 컬럼에 ENUM('값1','값2',...) 형태로 정의만 해주면, 잘못된 값의 입력을 자동으로 차단하고 저장 공간도 효율적으로 사용할 수 있습니다.