MySQL에서 복합 고유성 적용이 가능할까?
네, 가능합니다. MySQL에서는 UNIQUE 제약 조건에 두 개 이상의 컬럼을 함께 지정함으로써 복합 고유성(Compound Uniqueness)을 적용할 수 있습니다. 이렇게 하면 개별 컬럼의 값이 중복되더라도, 지정된 컬럼들의 조합 전체가 기존 데이터와 동일한 경우에만 삽입이 거부됩니다.
개념을 쉽게 이해하기 위해 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 복합 UNIQUE 키가 포함된 테이블 생성
먼저 학생 이름(StudentName)과 휴대폰 번호(StudentMobileNumber)의 조합에 대해 고유성을 강제하는 테이블을 생성합니다.
mysql> create table enforceCompoundUniqueness
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(40) NOT NULL,
-> StudentMobileNumber varchar(12) NOT NULL,
-> UNIQUE StudentName_StudentMobileNumber(StudentName,StudentMobileNumber)
-> );
Query OK, 0 rows affected (0.60 sec)
위 DDL 문에서 핵심은 마지막 줄입니다. UNIQUE StudentName_StudentMobileNumber(StudentName, StudentMobileNumber) 구문은 두 컬럼을 하나의 복합 고유 키로 묶어, 동일한 이름과 동일한 전화번호가 함께 존재하는 레코드는 허용하지 않도록 설정합니다.
2. 데이터 삽입 및 중복 검증
이제 INSERT 명령으로 레코드를 삽입하며 복합 고유성이 실제로 작동하는지 확인해 보겠습니다.
mysql> insert into enforceCompoundUniqueness(StudentName,StudentMobileNumber)
values('Larry','2322245676');
Query OK, 1 row affected (0.18 sec)
mysql> insert into enforceCompoundUniqueness(StudentName,StudentMobileNumber)
values('Larry','2322245676');
ERROR 1062 (23000): Duplicate entry 'Larry-2322245676' for key
'StudentName_StudentMobileNumber'
mysql> insert into enforceCompoundUniqueness(StudentName,StudentMobileNumber)
values('Sam','6475746455');
Query OK, 1 row affected (0.13 sec)
실행 결과를 보면 다음과 같은 동작을 확인할 수 있습니다.
- 첫 번째 INSERT: 'Larry'와 '2322245676' 조합이 처음 등장했으므로 정상적으로 삽입됩니다.
- 두 번째 INSERT: 동일한 이름과 전화번호 조합을 다시 삽입하려 했기 때문에 ERROR 1062(중복 항목 오류)가 발생하며 삽입이 거부됩니다.
- 세 번째 INSERT: 'Sam'이라는 새로운 조합이므로 문제없이 삽입됩니다.
즉, 고유성이 각 컬럼이 아닌 컬럼의 조합 단위로 적용되었음을 알 수 있습니다. 만약 이름만 같고 전화번호가 다른 레코드라면 정상적으로 삽입됩니다.
3. 저장된 데이터 조회
SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from enforceCompoundUniqueness;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+---------------------+
| StudentId | StudentName | StudentMobileNumber |
+-----------+-------------+---------------------+
| 1 | Larry | 2322245676 |
| 3 | Sam | 6475746455 |
+-----------+-------------+---------------------+
2 rows in set (0.00 sec)
정리
MySQL에서 복합 고유성은 UNIQUE 키이름(컬럼1, 컬럼2, ...) 형태로 간단히 적용할 수 있으며, 중복 데이터 입력 시 ERROR 1062 오류를 통해 자동으로 차단됩니다. 이 기능은 회원 정보, 주문 내역 등 여러 필드의 조합이 유일해야 하는 비즈니스 규칙을 데이터베이스 수준에서 보장해야 할 때 매우 유용합니다.