망각에 재주 있는 나를 위해 기록하는 곳.

[SQL] Constraint(제약조건) 본문

DB

[SQL] Constraint(제약조건)

baobabtree 2024. 3. 27. 23:34

Constraint(제약조건)는 데이터베이스 테이블의 열(Column)에 적용되는 규칙이나 조건을 말한다.

이러한 제약조건은 데이터의 무결성을 유지하고 데이터베이스의 일관성을 보장하기 위해 사용된다.

제약 조건은 특정 열에 허용되는 데이터의 유형, 범위, 관계 등을 정의한다.
제약조건을 사용하면 데이터베이스에 유효하지 않은 데이터가 쓰이지 않도록 방지할 수 있어서 데이터베이스의 데이터에 대한 정확도와 신뢰도를 보장한다. 쿼리는 PostgreSQL로 예시를 들었다.

 

 

NOT NULL

NOT NULL 제약 조건은 특정 열에 NULL 값을 허용하지 않는것이다. 즉, 해당 열은 항상 값이 존재해야 한다.

예를 들어, 사용자 테이블의 user_name 열에 NOT NULL 제약 조건을 설정하면 사용자는 반드시 사용자명(user_name)을 입력해야 한다.

CREATE TABLE users (
   user_id SERIAL PRIMARY KEY,
   user_name VARCHAR(50) NOT NULL,
   email VARCHAR(100)
);

 

 

UNIQUE

UNIQUE 제약 조건은 특정 열의 값이 고유해야 함을 나타낸다. 즉, 중복된 값을 허용하지 않는다.

예를 들어, 이메일 주소는 사용자 테이블에서 고유해야 하므로 UNIQUE 제약 조건을 설정할 수 있다.

CREATE TABLE users (
   user_id SERIAL PRIMARY KEY,
   user_name VARCHAR(50) NOT NULL,
   email VARCHAR(100) UNIQUE
);

 

 

PRIMARY KEY(기본 키)

PRIMARY KEY 제약조건은 테이블의 각 행을 고유하게 식별하는 열을 정의한다.

테이블당 하나의 기본 키만 가질 수 있다.

기본 키는 NOT NULL과 UNIQUE 제약 조건을 모두 포함한다.

CREATE TABLE users (
   user_id SERIAL PRIMARY KEY,
   user_name VARCHAR(50) NOT NULL,
   email VARCHAR(100) UNIQUE
);

 

 

FOREIGN KEY(외래 키)

FOREIGN KEY 제약 조건은 두 개의 테이블 간의 관계를 정의한다. 외래 키는 한 테이블의 열이 다른 테이블의 기본 키를 참조한다. 이를 통해 데이터의 무결성을 유지하고 관계형 데이터베이스에서 데이터의 일관성을 유지할 수 있다.
예를 들어, 사용자 테이블과 주문 테이블이 있을 때, 주문 테이블의 user_id 열이 사용자 테이블의 user_id 열을 참조하는 외래 키로 설정될 수 있다.

CREATE TABLE orders (
   order_id SERIAL PRIMARY KEY,
   order_date DATE,
   user_id INTEGER REFERENCES users(user_id)
);
CREATE TABLE orders (
   order_id SERIAL PRIMARY KEY,
   order_date DATE,
   user_id INTEGER,
   CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id)
);

 

CHECK

CHECK 제약조건은 열의 값이 특정 조건을 충족해야 함을 나타낸다.

아래 예제에서는 age 열의 값이 18 이상이어야 함을 설정한다.

CREATE TABLE students (
   student_id SERIAL PRIMARY KEY,
   student_name VARCHAR(50),
   age INTEGER CHECK (age >= 18)
);

 

 

DEFAULT

DEFAULT 제약조건은 열에 삽입되는 값이 명시되지 않았을 때 사용되는 기본값을 정의한다.

아래 예제에서는 order_date 열의 기본값을 현재 날짜로 설정한다.

CREATE TABLE orders (
   order_id SERIAL PRIMARY KEY,
   user_name VARCHAR(50) NOT NULL,
   order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

 

 

더 많은 활용 방법은 https://www.postgresql.org/docs/online-resources/에서

PostgreSQL Tutorial이나 Tutorials Point PostgreSQL을 참고하면 좋을 듯하다.