데이터베이스/MYSQL

MySQL에서 CASCADE, RESTRICT, SET NULL 차이점 알아보기

CodeCaine Explorer 2024. 12. 19. 17:15
728x90
반응형
SMALL

안녕하세요, 😊
오늘은 MySQL의 ON UPDATEON DELETE 행동들에 대해 쉽게 설명드릴게요. 이 내용은 데이터베이스 관계설정을 다룰 때 아주 중요한 부분이에요. 데이터 무결성을 유지하려면 꼭 알아야겠죠? 그럼 시작해볼까요? 🚀


ON UPDATE / ON DELETE란?

MySQL에서 외래 키(foreign key)를 설정할 때, 관련된 데이터가 수정되거나 삭제될 경우 어떻게 반응할지 정의하는 옵션이에요.
이 설정을 통해 부모 테이블의 데이터가 바뀔 때 자식 테이블의 데이터가 어떻게 처리될지를 정할 수 있답니다.


주요 동작 종류

다음은 자주 사용되는 행동 옵션이에요. 각각의 의미와 예를 볼까요?

1. NO ACTION

  • 의미: 아무것도 하지 않아요. 데이터 수정/삭제 시 제약 조건에 어긋나는 변경은 허용되지 않습니다.
  • 예제: 부모 데이터 삭제를 시도하면 에러 발생 ❌

2. RESTRICT

  • 의미: 부모 데이터를 수정/삭제하려고 할 때 자식 데이터가 있다면 즉시 에러를 발생시켜요.
  • 예제: 부모 데이터에 의존하는 자식 데이터가 있는 경우 수정/삭제 불가 ❌

💡 NO ACTION과 RESTRICT의 차이점
기능은 거의 동일하지만, NO ACTION은 트랜잭션이 끝난 후 조건을 확인하고, RESTRICT는 즉시 확인합니다.


3. CASCADE

  • 의미: 부모 데이터가 수정되거나 삭제될 경우, 자식 데이터도 같이 변경/삭제됩니다.

  • 예제:

    부모 데이터가 삭제되면 자식 데이터도 모두 삭제됩니다.

    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        CustomerID INT,
        FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
        ON DELETE CASCADE
    );

4. SET NULL

  • 의미: 부모 데이터가 삭제되거나 수정되면, 자식 테이블의 외래 키 값을 NULL로 설정합니다.

  • 예제:

    부모 데이터가 삭제된 후 자식 테이블에 NULL 값으로 남겨둠.

    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        CustomerID INT,
        FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
        ON DELETE SET NULL
    );

5. SET DEFAULT

  • 의미: 부모 데이터가 삭제되거나 수정될 경우, 자식 테이블의 외래 키 값을 기본값(default)으로 설정합니다.

  • 예제:

    부모 데이터 삭제 후 기본값(예: 0으로 설정)

    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        CustomerID INT DEFAULT 0,
        FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
        ON DELETE SET DEFAULT
    );

비교 표로 정리

동작 옵션 부모 수정 부모 삭제 자식 테이블 반응
NO ACTION 불가 불가 제약 위반 시 에러 발생
RESTRICT 불가 불가 즉시 에러 발생
CASCADE 변경됨 삭제됨 자식 데이터도 함께 변경/삭제
SET NULL NULL 설정 NULL 설정 자식 데이터의 외래 키를 NULL로 변경
SET DEFAULT 기본값 설정 기본값 설정 자식 데이터의 외래 키를 기본값으로 변경

응원의 한마디

데이터베이스 설계는 복잡할 수 있지만, 이렇게 하나씩 이해하면 어렵지 않답니다! 😄
여러분도 외래 키 제약 조건을 잘 활용해서 데이터 무결성을 확실히 지켜보세요. 💪

반응형
SMALL