MySQL에서 테이블에 중복된 값의 삽입을 방지하려면 UNIQUE 제약 조건을 사용해야 합니다. UNIQUE 제약 조건을 설정하면 해당 컬럼(또는 컬럼 조합)에 이미 존재하는 값과 동일한 데이터를 삽입할 때 데이터베이스가 자동으로 오류를 발생시켜 중복 저장을 막아줍니다.
1. UNIQUE 제약 조건이 있는 테이블 생성
먼저 FirstName과 LastName 두 컬럼의 조합에 대해 UNIQUE 제약 조건을 적용한 테이블을 생성해 보겠습니다.
mysql> create table DemoTable832(
FirstName varchar(100),
LastName varchar(100),
UNIQUE(FirstName,LastName)
);
Query OK, 0 rows affected (0.87 sec)
위 예제에서는 두 컬럼을 함께 묶어 UNIQUE로 지정했기 때문에, 이름과 성의 조합 전체가 동일한 경우에만 중복으로 판단됩니다.
2. 데이터 삽입 및 중복 확인
이제 INSERT 명령문을 사용하여 몇 개의 레코드를 삽입해 보겠습니다.
mysql> insert into DemoTable832 values('John','Smith');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable832 values('Adam','Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable832 values('John','Doe');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable832 values('John','Smith');
ERROR 1062 (23000): Duplicate entry 'John-Smith' for key 'FirstName'앞의 세 번의 삽입은 정상적으로 처리되었지만, 마지막에 이미 존재하는 ('John', 'Smith') 조합을 다시 삽입하려고 하자 다음과 같은 오류가 발생했습니다.
- ERROR 1062 (23000): 중복 항목 오류 코드
- Duplicate entry 'John-Smith': 'John-Smith'라는 조합이 이미 존재한다는 의미
이처럼 UNIQUE 제약 조건 덕분에 중복 데이터가 테이블에 저장되지 않고 즉시 차단됩니다.
3. 저장된 데이터 확인
SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable832;
실행 결과는 다음과 같습니다.
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| John | Doe |
| John | Smith |
+-----------+----------+
3 rows in set (0.00 sec)
결과를 보면 총 3개의 레코드만 저장되어 있으며, 중복 시도였던 네 번째 ('John', 'Smith') 데이터는 포함되어 있지 않습니다.
정리
UNIQUE 제약 조건은 단일 컬럼뿐만 아니라 여러 컬럼의 조합에도 적용할 수 있습니다. 이를 활용하면 응용 프로그램 수준의 검증 없이도 데이터베이스 차원에서 데이터 무결성을 보장할 수 있어, 회원 정보나 고유 식별 데이터를 관리할 때 매우 유용합니다.