Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블에 중복 데이터 입력을 막는 방법 – UNIQUE 키 설정 완벽 가이드

MySQL 테이블에 동일한 데이터가 중복해서 저장되지 않도록 하려면 해당 컬럼에 UNIQUE(고유) 키 제약 조건을 추가해야 합니다. UNIQUE 키가 설정된 컬럼에는 같은 값이 두 번 이상 들어갈 수 없으며, 중복 값을 삽입하려고 하면 MySQL이 오류를 발생시키며 입력을 거부합니다.

UNIQUE 키 추가 문법

기본적인 문법은 다음과 같습니다.

ALTER TABLE 테이블명 ADD CONSTRAINT UNIQUE KEY(컬럼명);

참고로 과거에 사용되던 ALTER IGNORE TABLE ... ADD UNIQUE KEY(...) 형태는 최신 MySQL 버전에서 지원이 중단(deprecated)되었으므로, 위와 같은 일반적인 ALTER TABLE 문법을 사용하는 것이 안전합니다.

예제 테이블 생성하기

먼저 실습용 테이블을 만들어 보겠습니다.

mysql> CREATE TABLE RemoveDuplicateEntry
-> (
-> Id int,
-> Name varchar(100)
-> ) ENGINE = MyISAM;
Query OK, 0 rows affected (0.15 sec)

UNIQUE 키 적용하기

이제 Id 컬럼에 고유 키 제약 조건을 추가합니다.

mysql> ALTER TABLE RemoveDuplicateEntry ADD CONSTRAINT UNIQUE KEY(Id);
Query OK, 0 rows affected (0.56 sec)
Records: 0 Duplicates: 0 Warnings: 0

테이블 구조 확인하기

DESC 명령으로 테이블 구조를 확인하면 Key 항목에 UNI가 표시되어 고유 키가 정상적으로 적용되었음을 알 수 있습니다.

mysql> DESC RemoveDuplicateEntry;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Id | int(11) | YES | UNI | NULL | |
| Name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

중복 삽입 시도와 오류 확인

먼저 정상적으로 한 건의 레코드를 삽입합니다.

mysql> INSERT INTO RemoveDuplicateEntry VALUES(101,'John');
Query OK, 1 row affected (0.06 sec)

이제 동일한 값을 다시 삽입하면 UNIQUE 제약 조건 때문에 다음과 같은 오류가 발생합니다.

mysql> INSERT INTO RemoveDuplicateEntry VALUES(101,'John');
ERROR 1062 (23000): Duplicate entry '101' for key 'Id'

최종 데이터 확인

SELECT 문으로 전체 레코드를 조회하면 중복 없이 한 건만 저장된 것을 확인할 수 있습니다.

mysql> SELECT * FROM RemoveDuplicateEntry;
+------+------+
| Id | Name |
+------+------+
| 101 | John |
+------+------+
1 row in set (0.00 sec)

정리 및 참고 사항

  • UNIQUE 키는 컬럼 단위로 중복 입력을 원천적으로 차단합니다.
  • 여러 컬럼의 조합에 대해 중복을 막으려면 복합(composite) UNIQUE 키를 활용할 수 있습니다.
  • 오류 코드 1062(Duplicate entry)는 중복 키 삽입 시도를 의미하며, 애플리케이션에서 이 코드를 감지해 사용자에게 친절한 안내 메시지를 제공할 수 있습니다.
  • InnoDB 스토리지 엔진에서도 동일하게 적용되며, 기존 데이터가 많은 테이블에 UNIQUE 키를 추가할 때는 인덱스 재구성에 따른 부하를 고려해야 합니다.