반응형
PostgreSQL에서 PRIMARY KEY
사용법
PRIMARY KEY
는 데이터베이스에서 테이블의 각 행을 고유하게 식별하는 데 사용되는 제약 조건입니다. PRIMARY KEY
가 지정된 컬럼(또는 컬럼들)은 다음과 같은 특징을 가집니다:
- 유일성:
PRIMARY KEY
제약을 지정한 컬럼은 중복된 값을 가질 수 없습니다. - NULL 불허:
PRIMARY KEY
는NULL
값을 허용하지 않습니다. 즉, 반드시 고유한 값이 있어야 합니다. - 단일 컬럼 또는 복합 컬럼으로 사용할 수 있습니다.
- 테이블당 하나만 지정할 수 있습니다. (복합
PRIMARY KEY
를 사용할 수 있지만, 단일PRIMARY KEY
는 한 테이블에 하나만 지정할 수 있습니다.)
PRIMARY KEY
사용법
- 테이블 생성 시
PRIMARY KEY
설정
테이블을 생성할 때, 컬럼에PRIMARY KEY
제약을 지정할 수 있습니다. - 기존 테이블에
PRIMARY KEY
제약 추가
이미 생성된 테이블에 나중에PRIMARY KEY
를 설정할 수도 있습니다.
예제 1: 테이블 생성 시 PRIMARY KEY
사용
CREATE TABLE users (
user_id SERIAL PRIMARY KEY, -- user_id 컬럼을 PRIMARY KEY로 설정
username VARCHAR(50) UNIQUE, -- username에 UNIQUE 제약을 추가
email VARCHAR(255) UNIQUE, -- email에 UNIQUE 제약을 추가
full_name VARCHAR(100)
);
- 이 예제에서
user_id
컬럼을PRIMARY KEY
로 지정하여 각 사용자를 고유하게 식별합니다.SERIAL
타입을 사용하면 자동으로 고유값이 생성됩니다. - 또한
username
과email
컬럼에 각각UNIQUE
제약을 추가하여 중복을 방지합니다.
예제 2: 복합 PRIMARY KEY
사용
하나의 컬럼이 아닌 여러 컬럼을 결합하여 고유성을 보장할 때는 복합 PRIMARY KEY
를 사용할 수 있습니다.
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id) -- order_id와 product_id의 조합이 고유
);
- 이 예제에서는
order_items
테이블에서 하나의 주문에 여러 제품이 포함될 수 있으므로,order_id
와product_id
컬럼의 조합이 고유하도록PRIMARY KEY
제약을 설정합니다. - 즉, 한 주문에서 같은 제품은 한 번만 등장할 수 있습니다.
예제 3: 기존 테이블에 PRIMARY KEY
제약 추가
이미 존재하는 테이블에 PRIMARY KEY
제약을 나중에 추가할 수 있습니다.
-- 예시 테이블
CREATE TABLE employees (
emp_id INT,
emp_name VARCHAR(100),
emp_salary DECIMAL
);
-- emp_id 컬럼에 PRIMARY KEY 제약 추가
ALTER TABLE employees
ADD CONSTRAINT pk_emp_id PRIMARY KEY (emp_id);
- 위 예제에서는
employees
테이블을 먼저 생성하고 나중에emp_id
컬럼에PRIMARY KEY
제약을 추가하는 방법을 보여줍니다. - 이 경우,
emp_id
는 고유하며NULL
값을 가질 수 없습니다.
PRIMARY KEY
제약 위반 시 오류 처리
PRIMARY KEY
제약이 있는 컬럼에 중복된 값을 삽입하려고 하면 오류가 발생합니다. 예를 들어:
-- 예시 테이블
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
product_name VARCHAR(100)
);
-- 첫 번째 삽입
INSERT INTO products (product_name) VALUES ('Laptop');
-- 두 번째 삽입 (중복된 product_id)
INSERT INTO products (product_id, product_name) VALUES (1, 'Smartphone');
두 번째 삽입에서 product_id
가 이미 자동 증가된 값에 대해 중복될 경우 다음과 같은 오류가 발생합니다:
ERROR: duplicate key value violates unique constraint "products_pkey"
DETAIL: Key (product_id)=(1) already exists.
이 오류는 PRIMARY KEY
제약을 위반했기 때문에 발생합니다.
PRIMARY KEY
와 FOREIGN KEY
관계
PRIMARY KEY
는 다른 테이블의 외래 키(FOREIGN KEY
)로 참조될 수 있습니다. 예를 들어:
-- 부모 테이블: orders
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INT,
order_date DATE
);
-- 자식 테이블: order_items
CREATE TABLE order_items (
order_item_id SERIAL PRIMARY KEY,
order_id INT,
product_id INT,
quantity INT,
FOREIGN KEY (order_id) REFERENCES orders (order_id) -- orders 테이블의 order_id를 외래 키로 참조
);
order_items
테이블에서order_id
는orders
테이블의order_id
를 참조하는 외래 키입니다. 이와 같이PRIMARY KEY
는 다른 테이블에서 참조될 수 있는 주요 키로 작용합니다.
요약
PRIMARY KEY
는 테이블에서 각 행을 고유하게 식별하기 위한 제약 조건입니다.- 한 테이블에는 하나의
PRIMARY KEY
만 존재할 수 있으며, 복합PRIMARY KEY
를 사용할 수 있습니다. PRIMARY KEY
제약을 설정한 컬럼은 중복값을 허용하지 않으며,NULL
값을 가질 수 없습니다.PRIMARY KEY
는 다른 테이블에서FOREIGN KEY
로 참조될 수 있습니다.
PostgreSQL에서 PRIMARY KEY
는 데이터 무결성을 보장하고, 효율적인 데이터 검색을 위해 매우 중요한 역할을 합니다.
반응형
'DB > PostgreSQL' 카테고리의 다른 글
[ PostgreSQL ] REFERENCES - 다른 테이블의 key를 사용하기 (0) | 2024.11.14 |
---|---|
[ PostgreSQL ] \c - 사용할 데이터베이스 선택하기 (0) | 2024.11.14 |
[ PostgreSQL ] UNIQUE - 중복값 제한하기 (0) | 2024.11.14 |
[ PostgreSQL ] NOT NULL - 빈값을 허용하지 않는 column 만들기 (0) | 2024.11.13 |
[ PostgreSQL ] CAST - query시 형변환 하기 (0) | 2024.11.12 |