Post

SQL - 외래키 제약 조건 ON DELETE, ON UPDATE 옵션이란?

SQL - 외래키 제약 조건 ON DELETE, ON UPDATE 옵션이란?

ON DELETE / ON UPDATE

  • DB는 외래키 제약 조건이 걸려 있는 상위 데이터의 삭제나 수정을 막는 것(RESTRICT)이 기본값임.
    • 가장 안전한 정책임.
  • 상위 테이블의 데이터가 삭제되면 그 데이터를 참조하는 하위 테이블의 데이터도 같이 삭제되도록 옵션을 줄 수 있음.

옵션 종류

옵션설명
RESTRICT (기본값)하위 테이블에 참조 중인 행이 있으면 상위 테이블의 행을 삭제/수정할 수 없음.
CASCADE상위 테이블의 행이 삭제/수정되면, 그 행을 참조하는 하위 테이블의 행도 함께 삭제/수정됨.
SET NULL상위 테이블의 행이 삭제/수정되면, 하위 테이블의 외래 키 컬럼 값을 NULL로 변경. 단, 하위 컬럼이 NULL 허용이어야 함.

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE articles (
    article_id BIGINT AUTO_INCREMENT,
    user_id BIGINT NOT NULL,
    title VARCHAR(100) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (article_id),
    CONSTRAINT fk_articles_users 
        FOREIGN KEY (user_id)
        REFERENCES users(user_id) 
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

CASCADE 옵션은 상위 데이터가 삭제/수정될 경우 연관된 하위 데이터를 모두 같이 삭제/수정 처리하기 때문에 사용 시 주의가 필요함.

대부분의 경우 기본키(PK) 값이 변하는 경우는 없기 때문에 ON UPDATE는 잘 사용되지 않음.

This post is licensed under CC BY 4.0 by the author.