MySQL PRIMARY KEY와 UNIQUE 제약 조건의 차이점
MySQL에서 PRIMARY KEY(기본 키)와 UNIQUE 제약 조건은 모두 컬럼에 중복된 값이 저장되지 않도록 데이터의 고유성을 보장하는 역할을 합니다. 하지만 두 제약 조건은 생성 가능한 개수, 인덱스 생성 방식, NULL 값 처리 등에서 뚜렷한 차이를 보입니다.
핵심 차이점 한눈에 보기
| PRIMARY KEY | UNIQUE 제약 조건 |
|---|---|
| 하나의 테이블에는 기본 키를 오직 하나만 생성할 수 있습니다. | 하나의 테이블에 여러 개의 UNIQUE 제약 조건을 추가할 수 있습니다. |
| 기본 키는 기본적으로 클러스터형 인덱스(clustered index)를 생성합니다. | UNIQUE 제약 조건은 기본적으로 비클러스터형 인덱스(non-clustered index)를 생성합니다. |
| PRIMARY KEY로 정의된 컬럼에는 NULL 값을 삽입할 수 없습니다. | UNIQUE 제약 조건이 설정된 컬럼에는 NULL 값을 삽입할 수 있습니다. |
차이점 상세 설명
1. 테이블당 생성 가능한 개수
기본 키는 테이블에서 행을 식별하는 대표 식별자 역할을 하므로, 하나의 테이블에 단 하나만 존재할 수 있습니다. 반면 UNIQUE 제약 조건은 이메일 주소, 전화번호처럼 고유성이 필요한 여러 컬럼에 각각 독립적으로 적용할 수 있습니다.
2. 인덱스 생성 방식
InnoDB 스토리지 엔진에서 기본 키는 실제 데이터가 물리적으로 정렬되어 저장되는 클러스터형 인덱스로 동작하여 조회 성능에 큰 영향을 줍니다. 반면 UNIQUE 제약 조건으로 생성되는 인덱스는 별도의 구조로 관리되는 비클러스터형(보조) 인덱스입니다.
3. NULL 값 허용 여부
기본 키는 행을 유일하게 식별해야 하므로 NULL 값을 절대 허용하지 않습니다. 반면 UNIQUE 제약 조건이 걸린 컬럼은 NULL 값을 허용하며, MySQL에서는 NULL 값끼리는 서로 다른 값으로 간주되어 여러 행에 NULL이 저장될 수 있습니다.
정리
행을 대표하는 식별자가 필요하다면 PRIMARY KEY를, 특정 컬럼의 값 중복만 막고 싶다면 UNIQUE 제약 조건을 사용하는 것이 적절합니다. 두 제약 조건의 특성을 정확히 이해하고 활용하면 데이터 무결성과 조회 성능을 모두 향상시킬 수 있습니다.