MySQL에서 ALTER TABLE 문 대신 CREATE UNIQUE INDEX 문을 사용하여 기존 테이블의 특정 필드에 UNIQUE 제약 조건을 적용할 수 있습니다. 이 방법은 테이블 구조를 직접 변경하지 않고도 고유 인덱스를 생성해 중복 데이터 입력을 방지할 수 있다는 장점이 있습니다.
CREATE UNIQUE INDEX 문법
CREATE UNIQUE INDEX index_name ON table_name(Column_name);
- index_name: 생성할 고유 인덱스의 이름
- table_name: 제약 조건을 적용할 테이블 이름
- Column_name: UNIQUE 제약 조건을 적용할 컬럼 이름
예제
다음과 같은 'Test5' 테이블이 있고, 'ID' 컬럼에 UNIQUE 제약 조건을 추가하고 싶다고 가정해 보겠습니다. 이 경우 CREATE UNIQUE INDEX 명령을 활용하면 됩니다.
mysql> DESCRIBE TEST5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec) mysql> CREATE UNIQUE INDEX ID_UNQ ON TEST5(ID); Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESCRIBE test5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
결과 확인
위 쿼리의 결과 집합을 보면 'ID' 컬럼의 Key 항목이 UNI로 표시된 것을 확인할 수 있습니다. 이는 해당 컬럼에 UNIQUE 제약 조건이 성공적으로 적용되었음을 의미합니다. 이후 동일한 ID 값을 가진 데이터를 삽입하려고 하면 MySQL은 오류를 반환하여 중복 데이터 저장을 차단합니다.
참고로 CREATE UNIQUE INDEX는 ALTER TABLE ... ADD UNIQUE와 기능적으로 동일하지만, 인덱스 이름을 명시적으로 지정할 수 있어 이후 인덱스 관리나 삭제 시 더 편리하다는 점에서 유용하게 활용됩니다.