MySQL에서 고유(UNIQUE) 제약 조건이란 해당 컬럼에 중복된 값을 저장할 수 없도록 하는 규칙입니다. 즉, 동일한 데이터가 두 번 이상 입력되는 것을 데이터베이스 차원에서 자동으로 차단해 줍니다.
테이블 생성 시 UNIQUE 제약 조건 설정하기
먼저 테이블을 생성하는 시점에 컬럼에 UNIQUE 제약 조건을 적용하는 방법부터 살펴보겠습니다. 아래 예제에서는 'name' 컬럼에 UNIQUE 옵션을 지정했습니다.
mysql> create table UniqueConstDemo
-> (
-> name varchar(100) unique
-> );
Query OK, 0 rows affected (0.72 sec)
이제 'name' 컬럼에는 같은 값이 두 번 이상 저장될 수 없습니다.
중복 값 입력 시 오류 확인
실제로 중복된 값을 삽입하면 어떤 오류가 발생하는지 확인해 보겠습니다. 먼저 정상적으로 한 건의 데이터를 삽입합니다.
mysql> insert into UniqueConstDemo values('John');
Query OK, 1 row affected (0.19 sec)이어서 동일한 값인 'John'을 다시 삽입해 보겠습니다.
mysql> insert into UniqueConstDemo values('John');위 쿼리를 실행하면 다음과 같은 오류 메시지가 출력됩니다.
ERROR 1062 (23000): Duplicate entry 'John' for key 'name'
오류 코드 1062는 MySQL에서 중복 항목(Duplicate entry)이 발생했음을 의미하며, UNIQUE 제약 조건이 정상적으로 작동하고 있다는 증거입니다.
중복되지 않은 값은 정상 입력
반면, 기존에 없던 새로운 값을 삽입하면 오류 없이 정상적으로 처리됩니다.
mysql> insert into UniqueConstDemo values('Bob');
Query OK, 1 row affected (0.11 sec)저장된 데이터 조회하기
SELECT 문을 사용하여 현재 테이블에 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select * from UniqueConstDemo;
실행 결과는 다음과 같습니다.
+-------+
| name |
+-------+
| Bob |
| John |
+-------+
3 rows in set (0.00 sec)
정리
이처럼 MySQL에서는 컬럼 정의 시 unique 키워드만 추가하면 간단히 고유 제약 조건을 설정할 수 있습니다. 이미 생성된 테이블이라면 ALTER TABLE ... ADD UNIQUE 구문으로 기존 컬럼에 UNIQUE 인덱스를 추가할 수 있으며, 이를 통해 이메일 주소, 사용자 이름처럼 중복이 허용되지 않아야 하는 데이터의 무결성을 손쉽게 보장할 수 있습니다.