MySQL UNIQUE 제약 조건이란?
이름 그대로 MySQL의 UNIQUE 제약 조건은 테이블 내 특정 컬럼 값의 고유성을 보장하는 기능입니다. 즉, 해당 컬럼에는 중복된 값을 삽입할 수 없습니다. UNIQUE 제약 조건은 일종의 인덱스를 생성하며, 인덱스가 걸린 컬럼의 모든 값은 반드시 서로 달라야 합니다.
또한 한 가지 중요한 점은 하나의 MySQL 테이블에 여러 개의 UNIQUE 컬럼을 둘 수 있다는 것입니다. 예를 들어 사용자 테이블에서 이메일 주소와 전화번호를 각각 UNIQUE로 설정해 중복 가입을 방지할 수 있습니다.
컬럼 정의 시 UNIQUE 키워드로 적용하기
UNIQUE 제약 조건은 컬럼을 정의하는 시점에 'UNIQUE' 키워드를 명시하여 적용할 수 있습니다. 다음 예제를 통해 살펴보겠습니다.
mysql> Create table test3(ID INT UNIQUE, Name Varchar(20)); Query OK, 0 rows affected (0.16 sec)
위 쿼리는 'ID' 컬럼에 UNIQUE 제약 조건이 설정된 'test3' 테이블을 생성합니다. DESCRIBE 문으로 확인해 보면 다음과 같습니다.
mysql> DESCRIBE test3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
Key 항목에 'UNI'가 표시된 것을 확인할 수 있으며, 이는 해당 컬럼에 UNIQUE 제약 조건(고유 인덱스)이 적용되었음을 의미합니다.
테이블 수준에서 UNIQUE 제약 조건 적용하기
UNIQUE 제약 조건은 컬럼 정의에 직접 명시하는 방법 외에도, 테이블 생성 시 별도의 제약 조건 구문으로 지정할 수 있습니다.
mysql> Create table test4(ID INT, Name Varchar(20),UNIQUE(ID)); Query OK, 0 rows affected (0.15 sec)
마찬가지로 DESCRIBE 문으로 확인해 보겠습니다.
mysql> DESCRIBE test4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
UNIQUE 제약 조건 활용 팁
- 중복 데이터 방지: 이메일, 사용자명 등 고유해야 하는 데이터에 적용하면 애플리케이션 로직 없이도 데이터베이스 차원에서 무결성을 유지할 수 있습니다.
- NULL 값 허용: PRIMARY KEY와 달리 UNIQUE 컬럼은 NULL 값을 허용합니다(단, 여러 개의 NULL은 중복으로 간주되지 않습니다).
- 조합 UNIQUE: 두 개 이상의 컬럼 조합에 대해 고유성을 부여하려면 UNIQUE(a, b) 형태로 작성할 수 있습니다.
이처럼 UNIQUE 제약 조건은 데이터 무결성을 지키는 간단하면서도 강력한 도구이며, 테이블 설계 단계에서 미리 적용해 두는 것이 좋습니다.