
외래 키는 한 테이블이 다른 테이블의 기본 키(primary key) 또는 고유 키(unique key)를 참조할 수 있도록 설정하는 제약 조건이다.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
);
orders.customer_id가 customers.customer_id를 참조하는 구조부모 테이블의 행이 삭제되거나 수정되면, 자식 테이블의 관련 행도 자동으로 삭제 또는 수정된다.
ON DELETE CASCADE
ON UPDATE CASCADE
부모 테이블의 행이 삭제 또는 수정되면, 자식 테이블의 외래 키 값을 NULL로 설정한다.
단, 자식 테이블의 외래 키 칼럼이 NULL 허용이어야 한다.
ON DELETE SET NULL
ON UPDATE SET NULL
부모 테이블의 행이 자식 테이블에서 참조 중일 경우, 삭제 또는 수정이 거부된다.
ON DELETE RESTRICT
ON UPDATE RESTRICT
MySQL에서는 RESTRICT와 동일하게 작동한다.
ON DELETE NO ACTION
ON UPDATE NO ACTION
SET DEFAULT는 MySQL 파서에서는 인식되어 문법 에러가 발생하지 않지만, 실제로 실행하면 오류가 발생한다.
이유는 아래 공식 문서 설명을 참고한다.
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT
< 공식 문서 설명 >
(원문) SET DEFAULT: This action is recognized by the MySQL parser, but both InnoDB and NDB reject table definitions containing ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT clauses.
(직역) SET DEFAULT: 이 동작은 MySQL 파서(parser)에서 인식되지만, InnoDB와 NDB 스토리지 엔진에서는 ON DELETE SET DEFAULT 또는 ON UPDATE SET DEFAULT 절을 포함한 테이블 정의를 거부합니다.
출처: MySQL Reference Manual - FOREIGN KEY constraints