반응형
PostgreSQL에서 UNIQUE
는 데이터베이스 테이블에서 특정 컬럼(또는 컬럼들의 조합)에 대해 중복된 값을 허용하지 않도록 하는 제약 조건입니다. 이를 사용하여 데이터 무결성을 보장할 수 있습니다.
UNIQUE
제약 조건은 테이블을 생성할 때 컬럼에 직접 추가하거나, 이미 생성된 테이블에 나중에 추가할 수도 있습니다.
UNIQUE
제약 조건 사용법
- 테이블 생성 시 사용
테이블을 생성할 때 컬럼에UNIQUE
제약을 지정할 수 있습니다. - 기존 테이블에 UNIQUE 제약 추가
이미 생성된 테이블에UNIQUE
제약을 나중에 추가할 수도 있습니다.
예제 1: 테이블 생성 시 UNIQUE
제약 사용
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE, -- 이메일 컬럼에 UNIQUE 제약을 추가
username VARCHAR(50) UNIQUE, -- 사용자명에 UNIQUE 제약을 추가
full_name VARCHAR(100)
);
email
과username
컬럼은 각각 고유해야 하므로UNIQUE
제약을 추가했습니다. 이 테이블에서는 각 이메일과 사용자명이 중복될 수 없습니다.
예제 2: 기존 테이블에 UNIQUE
제약 추가
이미 존재하는 테이블에 UNIQUE
제약을 추가하려면 ALTER TABLE
을 사용합니다.
ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);
- 이 예제에서는 이미 존재하는
users
테이블에email
컬럼에 대한UNIQUE
제약을 추가하는 방법을 보여줍니다.
예제 3: 여러 컬럼에 UNIQUE
제약 사용
여러 컬럼의 조합에 대해 고유성을 요구할 때는 UNIQUE
제약을 여러 컬럼에 대해 지정할 수 있습니다.
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE,
CONSTRAINT unique_customer_product UNIQUE (customer_id, product_id) -- customer_id와 product_id의 조합에 대해 고유성을 보장
);
- 이 예제에서는
customer_id
와product_id
의 조합에 대해 중복을 허용하지 않도록UNIQUE
제약을 추가했습니다. 즉, 한 고객은 하나의 제품에 대해 한 번만 주문할 수 있습니다.
예제 4: UNIQUE
제약 위반 시 오류 처리
UNIQUE
제약은 중복된 값을 삽입하려고 할 때 오류를 발생시킵니다. 예를 들어, 위에서 만든 users
테이블에 중복된 이메일을 삽입하려고 하면 다음과 같은 오류가 발생합니다.
-- 첫 번째 삽입
INSERT INTO users (email, username, full_name)
VALUES ('user@example.com', 'user1', 'John Doe');
-- 두 번째 삽입 (같은 이메일)
INSERT INTO users (email, username, full_name)
VALUES ('user@example.com', 'user2', 'Jane Smith');
두 번째 삽입에서 다음과 같은 오류가 발생합니다:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(user@example.com) already exists.
이 오류는 이메일 컬럼에 UNIQUE
제약이 있기 때문에 동일한 이메일을 두 번째로 삽입하려고 하면 발생하는 것입니다.
UNIQUE
와 NULL
값
PostgreSQL에서 UNIQUE
제약은 NULL
값에 대해서는 중복을 체크하지 않습니다. 즉, 여러 개의 NULL
값을 같은 컬럼에 삽입할 수 있습니다. 예를 들어:
CREATE TABLE test_table (
id SERIAL PRIMARY KEY,
name VARCHAR(100) UNIQUE
);
-- 첫 번째 삽입
INSERT INTO test_table (name) VALUES (NULL);
-- 두 번째 삽입 (NULL 값)
INSERT INTO test_table (name) VALUES (NULL);
이 경우 NULL
값은 중복되지 않으며, 위와 같이 여러 번 NULL
값을 삽입할 수 있습니다.
요약
UNIQUE
제약은 특정 컬럼에 대해 중복 값을 방지하는 제약입니다.- 컬럼에
UNIQUE
제약을 추가하거나, 여러 컬럼을 조합하여 고유성을 보장할 수 있습니다. NULL
값에 대해서는 중복이 허용되므로,NULL
값은 여러 번 삽입할 수 있습니다.
이와 같은 방법을 통해 PostgreSQL에서 데이터의 고유성을 유지하고 무결성을 보장할 수 있습니다.
반응형
'DB > PostgreSQL' 카테고리의 다른 글
[ PostgreSQL ] \c - 사용할 데이터베이스 선택하기 (0) | 2024.11.14 |
---|---|
[ PostgreSQL ] PRIMARY KEY - 식별자 Key 사용하기 (0) | 2024.11.14 |
[ PostgreSQL ] NOT NULL - 빈값을 허용하지 않는 column 만들기 (0) | 2024.11.13 |
[ PostgreSQL ] CAST - query시 형변환 하기 (0) | 2024.11.12 |
[ PostgreSQL ] PostgreSQL의 데이터 타입 알아보기 (0) | 2024.10.25 |