Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 외래 키(Foreign Key) 사용법: 개념부터 실전 예제까지

MySQL에서 외래 키(Foreign Key)는 두 테이블 간의 관계를 정의하고 데이터 무결성을 보장하는 핵심 기능입니다. 이 글에서는 MySQL에서 외래 키가 어떻게 동작하는지, 그리고 실제로 어떻게 적용하는지 예제와 함께 살펴보겠습니다.

외래 키 제약 조건과 InnoDB 스토리지 엔진

InnoDB 스토리지 엔진을 사용하는 테이블은 외래 키 제약 조건(foreign key constraint) 검사를 지원합니다. 다만, 두 테이블을 단순히 조인(join)하는 목적이라면 외래 키 제약 조건이 반드시 필요한 것은 아닙니다.

흥미로운 점은, InnoDB가 아닌 다른 스토리지 엔진에서는 REFERENCES tableName(colName) 구문이 실질적인 효과가 없다는 것입니다. 이 경우 해당 구문은 '현재 정의 중인 컬럼이 다른 테이블의 컬럼을 참조할 의도가 있다'는 사실을 사용자에게 알려주는 일종의 주석(comment) 역할만 수행합니다.

또한 MySQL은 'colName'이 실제로 'tableName' 안에 존재하는지, 혹은 'tableName' 자체가 실재하는 테이블인지에 대한 어떠한 검사도 수행하지 않는다는 점을 유의해야 합니다.

부모 테이블과 자식 테이블의 관계

일반적으로 부모 테이블(parent table)에서는 외래 키가 참조하는 컬럼이 기본 키(primary key) 역할을 하게 됩니다. 아래 예제를 통해 자식 테이블과 부모 테이블을 차례대로 생성해 보겠습니다.

1단계: 자식 테이블 생성하기

mysql> create table StudentEnrollment
-> (
    -> StudentId int,
    -> StudentName varchar(200),
    -> StudentFKPK int
-> );
Query OK, 0 rows affected (0.91 sec)

학생 등록 정보를 담는 자식 테이블 StudentEnrollment를 생성했습니다. 여기서 'StudentFKPK' 컬럼이 나중에 외래 키로 사용될 컬럼입니다.

2단계: 부모 테이블 생성하기

mysql> create table College
-> (
    -> StudentFKPK int,
    -> CourseId int,
    -> CourseName varchar(200),
    -> CollegeName varchar(200),
    -> primary key(StudentFKPK)
-> );
Query OK, 0 rows affected (0.46 sec)

부모 테이블 College에서는 'StudentFKPK' 컬럼이 기본 키(primary key)로 설정되어 있습니다. 이처럼 부모 테이블의 기본 키를 자식 테이블이 참조하는 구조가 바로 외래 키 관계의 기본 형태입니다.

3단계: ALTER 명령으로 외래 키 추가하기

테이블 생성이 완료되었다면, 이제 ALTER 명령어를 사용하여 자식 테이블에 외래 키를 추가할 수 있습니다.

기본 문법(SYNTAX)

ALTER table yourChildTableName add constraint anyConstraintName
foreign key(자식 테이블의 외래 키 컬럼명)
references College(부모 테이블의 기본 키 컬럼명);

실제 적용 예제

ALTER TABLE StudentEnrollment ADD CONSTRAINT fk_student_college
FOREIGN KEY (StudentFKPK)
REFERENCES College(StudentFKPK);

이렇게 하면 자식 테이블(StudentEnrollment)의 'StudentFKPK' 값은 반드시 부모 테이블(College)의 기본 키에 존재하는 값이어야 하므로, 잘못된 데이터 입력을 사전에 방지할 수 있습니다. 필요에 따라 ON DELETE CASCADEON UPDATE CASCADE 옵션을 함께 지정하면, 부모 데이터가 변경되거나 삭제될 때 자식 데이터도 자동으로 처리되도록 설정할 수 있습니다.