외래 키(Foreign Key)는 두 테이블 사이의 관계를 설정하는 데 사용됩니다. 외래 키 관계는 일대일(One to One) 또는 일대다(One to Many) 형태로 구성할 수 있으며, 한 테이블의 필드가 다른 테이블의 특정 필드와 연결되는 방식으로 동작합니다.
외래 키 관계의 두 가지 유형
- 일대일(One to One) 관계 — 한 테이블의 레코드 하나가 다른 테이블의 레코드 하나와만 연결됩니다.
- 일대다(One to Many) 관계 — 한 테이블의 레코드 하나가 다른 테이블의 여러 레코드와 연결됩니다.
예제: 테이블 생성하기
실제 예제를 통해 외래 키를 만드는 과정을 살펴보겠습니다. 먼저 첫 번째 테이블을 생성합니다. 테이블 생성에는 CREATE 명령어를 사용합니다.
mysql> create table tblF
-> (
-> id int ,
-> FirstName varchar(100),
-> FK_PK int
-> );
Query OK, 0 rows affected (0.57 sec)다음으로 두 번째 테이블을 생성합니다. 이때 FK_PK 컬럼을 기본 키(Primary Key)로 지정합니다.
mysql> create table tblP
-> (
-> FK_PK int,
-> LastName varchar(100),
-> primary key(FK_PK)
-> );
Query OK, 0 rows affected (0.94 sec)외래 키 생성 문법
두 테이블이 준비되면 ALTER TABLE 문법을 사용하여 외래 키 제약 조건을 추가할 수 있습니다. 아래는 외래 키를 생성하는 기본 문법입니다.
mysql> ALTER table tblF add constraint ConstFK foreign key(FK_PK) references tblP(FK_PK); Query OK, 0 rows affected (2.17 sec) Records: 0 Duplicates: 0 Warnings: 0
외래 키 생성 확인하기
외래 키가 정상적으로 생성되었는지 확인하려면 DESC 명령어를 사용하여 테이블 구조를 조회합니다.
mysql> DESC tblF;
실행 결과는 다음과 같습니다. FK_PK 컬럼의 Key 항목에 MUL이 표시된 것을 확인할 수 있으며, 이는 해당 컬럼에 외래 키가 적용되었음을 의미합니다.
+-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | FirstName | varchar(100) | YES | | NULL | | | FK_PK | int(11) | YES | MUL | NULL | | +-----------+--------------+------+-----+---------+-------+ 3 rows in set (0.05 sec)
이처럼 MySQL에서는 ALTER TABLE ... ADD CONSTRAINT 구문을 통해 간단하게 외래 키를 설정할 수 있으며, 이를 통해 테이블 간 데이터 무결성(Referential Integrity)을 유지할 수 있습니다.