개념
CASCADE는 외래 키 제약조건에 의해 자동으로 연쇄 삭제/업데이트를 수행한다.
트랜잭션은 여러 SQL 작업을 하나의 논리적인 작업 단위로 묶어서 모두 성공하거나 모두 실패하게 한다
CASCADE로 발생한 자동 작업도 트랜잭션 안에 포함되어 롤백이 가능하다.
CASCADE + 트랜잭션 롤백 동작 방식
- 트랜잭션 시작
- 부모 테이블에서
DELETE or UPDATE
- 자식 테이블에서
CASCADE에 따라 자동 삭제 또는 변경
ROLLBACK실행
- 부모와 자식 테이블 모두 변경 사항이 복구된다
예제: ON DELETE CASCADE + 트랜잭션
CREATE TABLE users
(
id INT PRIMARY KEY,
username VARCHAR(50)
);
CREATE TABLE orders
(
id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users (id)
ON DELETE CASCADE
);
INSERT INTO users (id, username)
VALUES (1, 'kim');
INSERT INTO orders (id, user_id)
VALUES (101, 1);
START TRANSACTION;
DELETE
FROM users
WHERE id = 1;
SELECT *
FROM orders;
ROLLBACK;
SELECT *
FROM users;
SELECT *
FROM orders;
요약
| 항목 | 설명 |
|---|
| CASCADE 작동 시점 | 트랜잭션 안에서 부모 레코드 조작 시 자동 실행 |
| ROLLBACK 시 영향 | 부모 + 자식의 변경사항 모두 되돌려짐 |
| 트랜잭션 단위 | CASCADE로 발생한 연쇄 작업도 한 트랜잭션 안에서 처리됨 |
| 엔진 조건 | 반드시 InnoDB여야 함 (MyISAM은 트랜잭션, CASCADE 모두 불가) |