MySQL UNIQUE 제약 조건 선언 문법
MySQL에서 특정 컬럼에 중복된 값이 저장되지 않도록 하려면 UNIQUE 제약 조건을 사용하면 됩니다. 테이블을 생성할 때 다음과 같이 선언할 수 있습니다.
create table yourTableName
(
yourColumnName1 dataType,
yourColumnName2 dataType,
UNIQUE(yourColumnName1),
UNIQUE(yourColumnName2)
);UNIQUE 제약 조건이 설정된 컬럼에는 동일한 값을 가진 레코드가 두 개 이상 저장될 수 없으며, 중복 데이터를 INSERT하려고 하면 에러가 발생하고 삽입이 거부됩니다.
예제 테이블 생성
먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Value int,
Value2 int,
UNIQUE(Value),
UNIQUE(Value2)
);
Query OK, 0 rows affected (13.98 sec)데이터 삽입 및 중복 차단 확인
이제 INSERT 명령어로 몇 개의 레코드를 삽입해 보겠습니다. 앞서 UNIQUE 제약 조건을 설정했기 때문에 중복된 값이 포함된 레코드는 삽입되지 않고 오류가 발생합니다.
mysql> insert into DemoTable values(10,20) ; Query OK, 1 row affected (0.32 sec) mysql> insert into DemoTable values(10,30); ERROR 1062 (23000): Duplicate entry '10' for key 'Value' mysql> insert into DemoTable values(40,20); ERROR 1062 (23000): Duplicate entry '20' for key 'Value2' mysql> insert into DemoTable values(60,70); Query OK, 1 row affected (1.37 sec)
실행 결과를 살펴보면, Value 컬럼에 이미 10이 존재하기 때문에 두 번째 INSERT는 실패하고, Value2 컬럼에 이미 20이 존재하기 때문에 세 번째 INSERT 역시 오류와 함께 거부됩니다.
저장된 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+--------+ | Value | Value2 | +-------+--------+ | 10 | 20 | | 60 | 70 | +-------+--------+ 2 rows in set (0.00 sec)
최종적으로 중복 없이 정상적으로 삽입된 2개의 레코드만 테이블에 남아 있는 것을 확인할 수 있습니다. 이처럼 UNIQUE 제약 조건을 활용하면 애플리케이션 로직에 의존하지 않고도 데이터베이스 수준에서 중복 데이터 입력을 원천적으로 차단할 수 있습니다.