안녕하세요, 😊
오늘은 MySQL의 ON UPDATE와 ON 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 | 기본값 설정 | 기본값 설정 | 자식 데이터의 외래 키를 기본값으로 변경 |
응원의 한마디
데이터베이스 설계는 복잡할 수 있지만, 이렇게 하나씩 이해하면 어렵지 않답니다! 😄
여러분도 외래 키 제약 조건을 잘 활용해서 데이터 무결성을 확실히 지켜보세요. 💪
'데이터베이스 > MYSQL' 카테고리의 다른 글
MySQL의 BETWEEN vs IN: 간단한 예제로 정리하기 (0) | 2024.12.19 |
---|---|
데이터 그룹화와 정렬: GROUP BY, HAVING, ORDER BY 예제 (0) | 2024.12.19 |
초보자를 위한 MySQL 조건식 사용법: NOT, AND/OR, LIKE (0) | 2024.12.19 |
MySQL 기초: SELECT, INSERT, UPDATE, DELETE 한 번에 배우기 (0) | 2024.12.19 |
MySQL DELIMITER 사용법: 초보자도 쉽게 배우는 BEGIN과 트랜잭션 (0) | 2024.12.19 |