외래키는 관계형 데이터베이스에서 테이블 간 연결을 담당하는 중요한 기능이다.
테이블을 분리해 관리하면서도 데이터의 일관성을 유지할 수 있도록 도와준다.
예를 들어 사원 정보와 부서 정보는 다음과 같이 분리할 수 있다.
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 |
댓글