PRIMARY KEY
- Table의 tuple을 식별하기 위해 사용하며 하나 이상의 attribute로 구성
- 중복된 값을 가질 수 없으며 NULL을 가질 수 없다. 예를 들어 다음과 같이 Primary Key인 id가 같은 tuple이 존재하면 안된다.
id | title |
---|---|
1 | title1 |
1 | title2 |
2 | title3 |
attribute가 하나일 때
create table Article(
id INT PRIMARY KEY,
...
);
attribute가 하나 이상일 때
create table Article(
id INT,
...
PRIMARY KEY (id)
);
attribute가 두 개 이상일 경우 PRIMARY KEY(id, number)처럼 선언해주면 된다.
UNIQUE
- Unique로 지정된 attribute는 중복된 값을 가질 수 없다
- MySQL, PostgreSQL의 경우 NULL은 중복을 허용한다
attribute가 하나일 때
create table Article(
id INT PRIMARY KEY,
title VARCHAR(50) UNIQUE,
....
);
attribute가 하나 이상일 때
create table Member(
id INT,
email VARCHAR(50),
...
UNIQUE(id, email)
);
NOT NULL
- attribute가 NOT NULL로 지정되면 해당 attribute는 NULL을 가질 수 없다
create table Article (
...
title VARCHAR(50) NOT NULL UNIQUE,
...
);
UNIQUE의 경우 NULL 값은 중복을 허용할 수 있기 때문에 대부분 NOT NULL과 같이 선언해준다.
DEFAULT
- attribute의 default 값을 정의할 때 사용
- 새로운 tuple을 저장할 때 해당 attribute에 대한 값이 없다면 default 값으로 저장
create table Article (
...
like INT DEFAULT 0,
...
);
CHECK
- attribute의 값을 제한해야할 경우 사용
attribute가 하나일 때
create table Member(
...
age INT CHECK (age >= 20),
....
);
attribute가 하나 이상일 때
create table Article(
created_date DATE,
modified_date DATE,
...
CHECK (modified_date >= created_date)
);
FOREGIN KEY
- attribute가 다른 table의 primary key나 unique key를 참조할 때 사용
create table Article (
...
comment_id INT,
FOREIGN KEY (comment_id)
references Comment(id)
on delete {reference_option}
on update {reference_option}
);
reference option
종류 | 설명 |
---|---|
CASCADE | 참조값의 삭제/변경을 그대로 반영 |
SET NULL | 참조값이 삭제/변경시 NULL로 변경 |
RESTRICT | 참조값이 삭제/변경되는 것을 금지 |
NO ACTION | RESTRICT와 유사 |
SET DEFAULT | 참조값이 삭제/변경시 default 값으로 변경 |
constraint 네이밍
- constraint에 이름을 명시해주면 위반했을 경우 명시된 이름으로 에러 메시지가 나타나기때문에 쉽게 파악할 수 있다
- constraint를 삭제하고 싶을 경우 명시해준 이름으로 삭제할 수 있다
create table Member(
...
age INT CONSTRAINT age_over CHECK (age >= 20),
....
);