본문 바로가기
  • Let's study
데이터베이스/MySQL

[MySQL] 외래키(FOREIGN KEY)

by 코딩고수이고파 2026. 7. 30.

외래키는 관계형 데이터베이스에서 테이블 간 연결을 담당하는 중요한 기능이다.
테이블을 분리해 관리하면서도 데이터의 일관성을 유지할 수 있도록 도와준다.

예를 들어 사원 정보와 부서 정보는 다음과 같이 분리할 수 있다.

emp 테이블

id name deptId
1 김철수 1
2 이영희 2
3 박민수 1

dept 테이블

id name
1 개발팀
2 기획팀

emp 테이블의 deptId는 dept 테이블의 id를 참조하고 있다.
이처럼 다른 테이블의 기본 키(Primary Key)를 참조하는 컬럼을 외래키(Foreign Key)라고 한다.

외래키를 사용하면 테이블 간의 관계를 표현할 수 있고, 잘못된 데이터가 저장되는 것을 방지할 수 있다.

외래키 생성

외래키는 테이블 생성 시 FOREIGN KEY를 사용해서 설정할 수 있다.

 

CREATE TABLE dept (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);
CREATE TABLE emp (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    deptId INT,

    FOREIGN KEY(deptId)
    REFERENCES dept(id)
);

 

위 코드는 emp.deptId가 dept.id를 참조하도록 설정한 것이다.

따라서 존재하지 않는 부서 번호를 가진 데이터를 추가할 수 없다.

 

INSERT INTO emp(name, deptId)
VALUES('홍길동', 3);

 

dept 테이블에 id=3인 데이터가 없다면 외래키 제약조건 오류가 발생한다.

외래키를 사용하는 이유

외래키를 사용하지 않는다면 사원 테이블에 부서명을 직접 저장해야 한다.

이 경우 같은 데이터가 반복적으로 저장되고, 부서명이 변경되면 여러 데이터를 수정해야 한다.

반면 외래키를 사용하면 부서 정보는 dept 테이블에서 한 번만 관리하고, 사원 테이블에서는 부서 번호만 저장한다.

이처럼 외래키는 데이터 중복을 줄이고 데이터 무결성을 유지하는 역할을 한다.

외래키 삭제

외래키를 삭제하려면 제약조건 이름이 필요하다.

외래키 확인

SHOW CREATE TABLE emp;

삭제

ALTER TABLE emp
DROP FOREIGN KEY fk_emp_dept;

ON DELETE 옵션

외래키에서는 참조하는 데이터가 삭제될 때 동작을 지정할 수 있다.

옵션 설명
RESTRICT 참조하는 데이터가 있으면 삭제 불가
CASCADE 부모 데이터 삭제 시 관련 데이터도 삭제
SET NULL 참조 값을 NULL로 변경

예를 들어 CASCADE를 설정하면 부서를 삭제했을 때 해당 부서에 속한 사원 데이터도 함께 삭제된다.

 

CREATE TABLE emp (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    deptId INT,

    FOREIGN KEY(deptId)
    REFERENCES dept(id)
    ON DELETE CASCADE
);

 

 

'데이터베이스 > MySQL' 카테고리의 다른 글

[MySQL] CHAR / VARCHAR, INDEX  (0) 2026.07.30
[MySQL] 집계 함수, GROUP BY, 서브쿼리  (0) 2026.07.29
[MySQL] JOIN, LEFT JOIN, RIGHT JOIN  (0) 2026.07.29
[MySQL] SELECT 심화  (0) 2026.07.29
[MySQL] 기초 명령어  (0) 2026.07.28

댓글