[DDL, Data Definition Language] 제약조건

제약조건이란? 데이터의 무결성을 위해 각 컬럼에 생성하는 데이터의 제약 장치 를 의미한다.
HootJem's avatar
Aug 20, 2024
[DDL, Data Definition Language] 제약조건
💡
제약조건이란? 데이터의 무결성을 위해 각 컬럼에 생성하는 데이터의 제약 장치 제약조건은 테이블 생성 시 컬럼 추가시, 이미 생성된 컬럼에 제약조건을 정의하거나 추가가 가능하다.
 

1. PRIMARY KEY(기본키)

  • 유일한 식별자로, 중복이 불가능하고 NULL 값을 허용하지 않습니다.
  • 특정 컬럼에 기본 키를 설정하면 NOT NULL 속성이 자동으로 부여됩니다. (CTAS로 테이블 복사 시 복사되지 않음)
  • 하나의 테이블에 여러 기본 키를 생성할 수 없으며, 하나의 기본 키를 여러 컬럼을 결합하여 생성할 수 있습니다.
  • 기본 키 생성 시 자동으로 UNIQUE INDEX가 생성됩니다.
CREATE TABLE Users ( id INT PRIMARY KEY, username VARCHAR(50) NOT NULL );
# 컬럼 추가 시 제약조건 생성 ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [DEFAULT 기본값][[CONSTRAINT 제약조건명] 제약조건종류]; # 이미 생성된 컬럼에 조건만 추가 ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건 종류]; # 제약조건 삭제 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;

2. UNIQUE

  • 특정 컬럼에 대해 중복된 값을 허용하지 않도록 하는 제약 조건입니다. NULL 값은 허용됩니다.
CREATE TABLE Users ( id INT PRIMARY KEY, email VARCHAR(255) UNIQUE );

3. NOT NULL

  • 특정 컬럼이 NULL 값을 가질 수 없도록 설정하는 제약 조건입니다.
  • 만들어진 컬럼에 NOT NULL 선언시 제약조건 생성이 아닌 MODIFY 로 해결할 수 있습니다.
CREATE TABLE Users ( id INT PRIMARY KEY, username VARCHAR(50) NOT NULL ); ALTER TABLE T1 MODIFY COL12 NOT NULL; ALTER TABLE T1 MODIFY COL12 CONSTRAINT PROPESSOR_COL_12_NN NOT NULL;

4. FOREIGN KEY

  • 외래 키는 테이블 간의 관계를 정의하며, 주로 다대일(1) 관계에서 사용됩니다.
  • 외래 키는 N쪽 테이블에 위치하며, 참조되는 테이블의 기본 키를 참조합니다.
notion image
💡
사용자가 게시글을 작성할 때, 한 명의 사용자는 여러 게시글을 작성할 수 있습니다. 이는 사용자와 게시글이 1:N 관계에 있다는 것을 의미합니다.
id
username
board.id
1
Scott
1, 2
2
Smith
3
Json
3
이와같은 테이블 구조는 옳지않다. 원자성을 위배하기 때문이다. 이와같이 한 컬럼이 여러 값을 가질 수 없다.
id
title
user.id
1
제목1
1
2
제목2
1
3
제목3
3
FK 를 넣게 되면 Board 테이블에 user.id 가 들어오는 형태가 옳다.
CREATE TABLE Board ( id INT PRIMARY KEY, title VARCHAR(255), user_id INT, FOREIGN KEY (user_id) REFERENCES Users(id) );
  • FOREIGN KEY 옵션 생성 시 정의(수정 X 재생성 O)
    • ON DELETE CASCADE: 부모 데이터 삭제 시 자식 데이터도 함께 삭제됩니다.
    • ON DELETE SET NULL: 부모 데이터 삭제 시 자식 데이터의 참조값이 NULL로 설정됩니다.
 

5. CHECK

  • CHECK 제약 조건은 컬럼에 입력되는 데이터에 대해 특정 조건을 설정할 수 있습니다. 예를 들어, 특정 컬럼의 값이 특정 범위 내에 있어야 한다거나 특정 조건을 만족해야 한다는 제약을 설정할 수 있습니다.
CREATE TABLE Employees ( id INT PRIMARY KEY, age INT CHECK (age >= 18) );
 
Share article

[HootJem] 개발 기록 블로그