SQL/RDBMS

[MariaDB] 외래키 생성/삭제 방법

dddzr 2024. 11. 30. 22:44

 

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 = '데이터베이스명';