이미 생성되어 있는 MySQL 테이블에도 ALTER TABLE 문을 사용하면 손쉽게 FOREIGN KEY(외래 키) 제약 조건을 추가할 수 있습니다. 외래 키는 두 테이블 간의 관계를 설정하고 데이터의 참조 무결성을 보장해 주는 중요한 기능입니다.
기본 문법
외래 키를 추가하는 기본적인 SQL 문법은 다음과 같습니다.
ALTER TABLE 테이블명 ADD FOREIGN KEY (열_이름) REFERENCES 기준_테이블명(기준_열_이름);
사용 예시
예를 들어, Orders1 테이블에 외래 키 제약 조건을 추가하고, 이것이 Primary Key(기본 키)로 지정된 Cust_Id 열을 가진 Customer 테이블을 참조하도록 만들고 싶다고 가정해 보겠습니다. 이 경우 다음과 같은 쿼리를 실행하면 됩니다.
mysql> Alter table orders1 add FOREIGN KEY(Cust_id) REFERENCES Customer(Cust_id);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0
쿼리가 정상적으로 실행된 후, DESCRIBE 명령어로 테이블 구조를 확인해 보면 Cust_id 열의 Key 항목이 MUL로 표시되는 것을 확인할 수 있습니다. 이는 해당 열에 외래 키가 성공적으로 적용되었음을 의미합니다.
mysql> Describe ORDERS1;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| order_id | int(11) | NO | PRI | NULL | |
| Product_name | varchar(25) | YES | | NULL | |
| orderdate | date | YES | | NULL | |
| Cust_id | int(11) | YES | MUL | NULL | |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)
추가 시 유의 사항
기존 테이블에 외래 키를 추가할 때는 다음 조건들을 반드시 확인해야 합니다.
- 참조 대상이 되는 열은 반드시 부모 테이블에서 Primary Key 또는 UNIQUE 인덱스여야 합니다.
- 두 열의 데이터 타입과 크기가 일치해야 합니다. 예를 들어 int(11)이라면 양쪽 모두 동일하게 맞춰야 합니다.
- 자식 테이블에 이미 존재하는 데이터 중 부모 테이블에 없는 값이 있다면 외래 키 추가가 실패합니다. 이 경우 먼저 데이터를 정리해야 합니다.
- MySQL에서 외래 키는 기본적으로 InnoDB 스토리지 엔진에서만 지원됩니다. MyISAM 등 다른 엔진을 사용 중이라면 엔진 변경이 필요합니다.
이러한 조건만 충족한다면 ALTER TABLE 문 하나로 기존 테이블에도 안전하게 외래 키 제약 조건을 적용할 수 있습니다.