본문 바로가기

[Database] 고유키(Unique Key)와 주키(Primary Key)의 차이

@Jeeqong 2025. 3. 15. 21:05
반응형

1. 고유 키 (Unique Key)

고유 키는 테이블 내에서 특정 컬럼(또는 컬럼 조합)이 중복되지 않도록 보장하는 제약 조건입니다.

 

특징:

같은 테이블 내에서 여러 개의 고유 키를 가질 수 있음.

NULL 값을 허용할 수도 있음 (NULL은 중복으로 간주되지 않음).

UNIQUE 제약 조건을 설정하면 해당 컬럼 값은 중복되지 않음.

보조 인덱스(Secondary Index) 역할을 하여 검색 성능을 높일 수도 있음.

 

예제:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE, -- 이메일은 중복될 수 없음 (고유 키)
    username VARCHAR(50) UNIQUE -- 사용자명도 중복 불가 (고유 키)
);

 


 

2. 주 키 (Primary Key)

주 키는 테이블에서 각 행을 유일하게 식별하는 키입니다.

 

특징:

하나의 테이블에는 하나의 주 키만 존재 가능.

NULL 값을 허용하지 않음.

자동으로 고유 키(Unique Key) 속성을 가짐, 즉 중복된 값을 저장할 수 없음.

보조 인덱스가 아닌 **클러스터형 인덱스(Clustered Index)**로 동작.

 

예제:

CREATE TABLE users (
    id SERIAL PRIMARY KEY, -- 주 키 (자동 증가 ID)
    email VARCHAR(255) UNIQUE,
    username VARCHAR(50) UNIQUE
);

 


 

3. 고유 키 (Unique Key) VS 주 키 (Primary Key) 차이점 정리

구분 고유 키 (Unique Key) 주 키 (Primary Key)
개수 여러 개 가능 테이블당 하나만 가능
NULL 허용 여부 NULL 허용 가능 NULL 불가능
중복 허용 여부 중복 불가 중복 불가
인덱스 유형 보조 인덱스(Secondary Index) 클러스터형 인덱스(Clustered Index)
목적 특정 컬럼의 고유성 보장 테이블의 각 행을 유일하게 식별

4. 주 키와 고유 키를 함께 사용하는 경우

테이블에서 id를 주 키로 사용하면서, email을 고유 키로 설정하는 경우가 많음.

CREATE TABLE customers (
    customer_id UUID PRIMARY KEY, -- 주 키 (각 고객을 유일하게 식별)
    email VARCHAR(255) UNIQUE, -- 이메일 중복 방지
    phone VARCHAR(20) UNIQUE -- 전화번호 중복 방지
);
  • customer_id는 주 키로, 고객을 유일하게 식별.
  • email과 phone은 고유 키로, 중복 저장을 방지하지만 NULL을 허용할 수도 있음.

 


 

5. 언제 어떤 키를 사용해야 할까?

  • 주 키 (Primary Key)
    • 테이블의 각 행을 유일하게 식별해야 할 때 사용.
    • NULL 값이 없어야 할 경우.
    • 보통 id 컬럼을 주 키로 설정.
  • 고유 키 (Unique Key)
    • 특정 컬럼 값이 중복되지 않아야 하지만 주 키로 사용할 필요는 없는 경우 사용.
    • 예: 이메일, 사용자명, 전화번호 등의 데이터.

 

✅ 최종정리

  1. 주 키는 각 행을 유일하게 식별하는 필수 키 (NULL 허용 ❌).
  2. 고유 키는 특정 컬럼의 중복을 막는 제약 조건 (NULL 허용 가능).
  3. 주 키는 한 테이블에 하나만 존재 가능, 고유 키는 여러 개 가능.
  4. 주 키는 자동으로 고유 키의 성격을 가짐, 하지만 고유 키가 반드시 주 키일 필요는 없음.
반응형
Jeeqong
@Jeeqong :: JQVAULT

Jeeqong's vault : 정보/기록을 쌓아두는 공간 웹개발 포스팅 일상 리뷰를 기록하는 공간입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차