1. foreign key 추가
1-1. 테이블과 동시에 생성 예제
- 이름 자동 생성
CREATE TABLE comments
(
comment_id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
post_id INT NOT NULL,
-- ...
FOREIGN KEY(post_id) REFERENCES post(post_id)
)
1-2. 테이블이 이미 있을 때 외래키 추가 예제
ALTER TABLE comments
ADD CONSTRAINT fk_post_id
FOREIGN KEY (post_id) REFERENCES posts(post_id)
ON DELETE CASCADE;
1-3. 외래키 삭제 옵션
- 외래키 추가시 삭제 옵션을 지정할 수 있다.
- ON DELETE CASCADE
- 부모 레코드가 삭제될 때 자식 레코드도 자동으로 삭제됩니다.
- 예: 부모가 삭제되면 자식도 삭제되는 방식입니다.
- ON DELETE SET NULL
- 부모 레코드가 삭제되면 자식 레코드의 해당 외래 키 컬럼이 NULL로 설정됩니다.
- 예: 부모가 삭제되면 자식 레코드의 user_id와 같은 외래 키 컬럼이 NULL로 바뀝니다.
- ON DELETE NO ACTION
- 부모 레코드가 삭제될 때 자식 레코드에 대한 아무런 행동도 하지 않습니다.
- NO ACTION은 사실 RESTRICT와 동일한 동작을 합니다. 즉, 자식 레코드가 존재하면 부모 레코드를 삭제할 수 없습니다.
- ON DELETE RESTRICT (DEFALT)
- 부모 레코드가 삭제될 때 자식 레코드가 존재하면 삭제가 거부됩니다.
- 자식 레코드가 삭제되기 전까지는 부모 레코드를 삭제할 수 없습니다.
- *이 경우 부모를 지우지 않고 status컬럼으로 관리할 수 있다. (ex. user 테이블에서 상태를 deleted로 관리)
2. foreign key 삭제
ALTER TABLE comments DROP FOREIGN KEY fk_post_id;
3. foreign key 확인
- 테이블 기준
SELECT * FROM information_schema.table_constraints WHERE table_name = '테이블명';
- 데이터베이스 기준
SELECT * FROM information_schema.table_constraints WHERE constraint_schema = '데이터베이스명';
'SQL > RDBMS' 카테고리의 다른 글
쿼리 실행 속도 확인 (0) | 2024.05.30 |
---|---|
서브 쿼리 ORDER BY (0) | 2023.10.23 |
[MariaDB] RECURSIVE 계층 메뉴 구성 (0) | 2023.08.14 |
[MariaDB] 중복 파일명 처리(이름 뒤에 seq 붙이기) (0) | 2023.07.03 |
[MariaDB] 환경 구축 (생성, 삭제, 권한, 백업) (0) | 2023.04.25 |