0Pricing
SQL Academy · 강의

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. NOT NULL과 CHECK 제약 조건
  2. UNIQUE 제약 조건과 복합 키
  3. FOREIGN KEY와 참조 동작
  4. DEFAULT 값과 생성 열
← SQL Academy(으)로 돌아가기