UNIQUE 제약 조건과 복합 키
하나 이상의 열에 고유성을 적용하고, 고유 인덱스에서 NULL이 처리되는 방식을 이해하며, 자연 키에는 복합 고유성을 사용합니다.
UNIQUE 제약 조건과 복합 키은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
UNIQUE: 중복 허용 안 됨
UNIQUE 제약 조건은 제약 대상 열에서 두 행이 같은 값을 공유하지 못하게 합니다:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);UNIQUE는 인덱스를 생성합니다
UNIQUE 제약 조건은 고유 B-트리 인덱스로 구현되므로 해당 열을 사용한 조회가 빠릅니다.
-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';복합 UNIQUE
여러 열의 조합에 대한 고유성입니다:
CREATE TABLE memberships (
user_id BIGINT NOT NULL,
group_id BIGINT NOT NULL,
role TEXT NOT NULL,
UNIQUE (user_id, group_id) -- a user can be in a group at most once
);UNIQUE와 PRIMARY KEY 비교
PRIMARY KEY는 본질적으로 UNIQUE + NOT NULL에 식별자 역할이 지정된 것입니다. 테이블에는 PRIMARY KEY를 ONE개만 둘 수 있지만 UNIQUE 제약 조건은 여러 개 둘 수 있습니다.
UNIQUE에서의 NULL
표준 SQL에서는 NULL을 다른 모든 값(다른 NULL 포함)과 서로 다른 값으로 취급합니다. 따라서 UNIQUE 열에 NULL인 행을 여러 개 둘 수 있습니다:
CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL); -- both succeed
-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);복합 PRIMARY KEY
자연스러운 복합 키가 적합하다면 이를 PRIMARY KEY로 사용합니다:
CREATE TABLE order_items (
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id BIGINT NOT NULL REFERENCES products(id),
quantity INT NOT NULL CHECK (quantity > 0),
PRIMARY KEY (order_id, product_id)
);대체 키와 UNIQUE 자연 키
일반적인 패턴은 합성 id를 PRIMARY KEY로 사용하고, 실제 세계의 고유성은 UNIQUE로 보장하는 것입니다:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name TEXT NOT NULL
);부분 UNIQUE 인덱스
일부 행 사이에서만 고유성을 적용합니다:
-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
ON users (email)
WHERE deleted_at IS NULL;표현식 UNIQUE 인덱스
계산된 표현식에 고유성을 적용하며, 대소문자를 구분하지 않는 이메일에 유용합니다:
CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));UNIQUE 위반 오류
중복 INSERT를 실행하면 다음이 반환됩니다:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(alice@example.com) already exists.UPSERT는 UNIQUE를 기반으로 합니다
ON CONFLICT가 대상으로 삼으려면 UNIQUE 또는 PRIMARY KEY가 필요합니다. PostgreSQL은 이를 통해 무엇이 중복인지 판단합니다.
요약
UNIQUE는 NOT NULL 다음으로 중요한 제약 조건입니다.
- 단일 열 또는 복합 열
- "활성 행 사이에서만" 적용하는 부분 UNIQUE
- 대소문자를 구분하지 않는 키를 위한 표현식 UNIQUE
- NULL은 서로 다른 값으로 취급된다는 규칙에 주의
빠른 확인
표준 SQL에서 UNIQUE 열에 NULL 값을 여러 개 포함할 수 있습니까?
자주 묻는 질문
“UNIQUE 제약 조건과 복합 키” 강의는 무료인가요?
네 — “UNIQUE 제약 조건과 복합 키” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“UNIQUE 제약 조건과 복합 키”에서 뭘 배우나요?
하나 이상의 열에 고유성을 적용하고, 고유 인덱스에서 NULL이 처리되는 방식을 이해하며, 자연 키에는 복합 고유성을 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“UNIQUE 제약 조건과 복합 키” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- NOT NULL과 CHECK 제약 조건
- UNIQUE 제약 조건과 복합 키
- FOREIGN KEY와 참조 동작
- DEFAULT 값과 생성 열