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

MySQL 외래 키(Foreign Key) 기초 완벽 정리 - 개념부터 실전 예제까지

MySQL 외래 키란 무엇인가?

외래 키(Foreign Key)는 데이터베이스에서 테이블 간의 참조 무결성(referential integrity)을 유지하기 위해 사용되는 제약 조건(constraint)입니다. 두 테이블을 관계로 연결할 때, 외래 키를 설정한 테이블을 자식 테이블(child table), 참조 대상이 되는 테이블을 부모 테이블(parent table)이라고 부릅니다.

부모 테이블에서는 외래 키로 지정된 컬럼이 기본 키(Primary Key) 역할을 하게 됩니다. 이번 글에서는 실제 예제를 통해 MySQL에서 외래 키를 생성하고 확인하는 방법을 단계별로 알아보겠습니다.

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

먼저 외래 키를 가질 자식 테이블을 생성합니다.

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

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

다음으로 참조될 부모 테이블을 생성합니다. 여기서 'StudentFKPK' 컬럼이 기본 키로 설정됩니다.

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)

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

부모 테이블의 'StudentFKPK' 컬럼이 기본 키로 설정되어 있으므로, 이제 ALTER 명령어를 사용해 자식 테이블에 외래 키 제약 조건을 추가할 수 있습니다.

외래 키를 추가하는 기본 문법은 다음과 같습니다.

ALTER table yourChildTableName add constraint anyConstraintName
foreign key(primary key column name for parent table)
references College(primary key column name for parent table);

위 문법을 실제 쿼리에 적용하면 다음과 같습니다.

mysql> alter table StudentEnrollment add constraint StudCollegeConst foreign key(StudentFKPK) references College(StudentFKPK);
Query OK, 0 rows affected (1.78 sec)
Records: 0 Duplicates: 0 Warnings: 0

4단계: 외래 키 제약 조건 확인하기

외래 키가 정상적으로 등록되었는지 확인하려면 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 뷰를 조회하면 됩니다. 확인용 기본 문법은 아래와 같습니다.

SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'yourParentTableName or your referencedTableName';

위 문법을 실제 쿼리에 적용한 결과입니다.

mysql> SELECT
-> TABLE_NAME,
-> COLUMN_NAME,
-> CONSTRAINT_NAME,
-> REFERENCED_TABLE_NAME,
-> REFERENCED_COLUMN_NAME
-> FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
-> WHERE
-> REFERENCED_TABLE_NAME = 'College';

실행 결과는 다음과 같습니다.

+-------------------+-------------+------------------+-----------------------+------------------------+
| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+-------------------+-------------+------------------+-----------------------+------------------------+
| StudentEnrollment | StudentFKPK | StudCollegeConst | College | StudentFKPK |
+-------------------+-------------+------------------+-----------------------+------------------------+
1 row in set, 2 warnings (0.03 sec)

결과 해석

출력 결과를 보면 컬럼명은 'StudentFKPK'이며, 제약 조건 이름(CONSTRAINT_NAME)은 'StudCollegeConst'로 등록된 것을 확인할 수 있습니다. 즉, 자식 테이블(StudentEnrollment)의 StudentFKPK 컬럼이 부모 테이블(College)의 StudentFKPK 컬럼을 참조하는 외래 키 관계가 성공적으로 설정된 것입니다.

이처럼 외래 키를 활용하면 부모 테이블에 존재하지 않는 값을 자식 테이블에 삽입하는 것을 방지하여, 데이터의 일관성과 무결성을 효과적으로 보장할 수 있습니다.