MySQL에서는 하나의 테이블에 있는 여러 열에 FOREIGN KEY(외래 키) 제약 조건을 추가할 수 있습니다. 다만 중요한 조건이 있는데, 자식 테이블의 각 외래 키는 반드시 서로 다른 부모 테이블을 참조해야 합니다.
예제를 통한 이해
먼저 'customer2'라는 테이블이 있고, 이 테이블의 'cust_unq_id' 필드에 PRIMARY KEY(기본 키) 제약 조건이 설정되어 있다고 가정해 보겠습니다.
mysql> describe customer2; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | cust_id | int(11) | YES | | NULL | | | First_name | varchar(20) | YES | | NULL | | | Last_name | varchar(20) | YES | | NULL | | | City | varchar(10) | YES | | NULL | | | cust_unq_id | int(11) | NO | PRI | 0 | | +-------------+-------------+------+-----+---------+-------+ 5 rows in set (0.06 sec)
그리고 'orders1'이라는 테이블에는 이미 'Cust_id' 필드에 외래 키 제약 조건이 걸려 있으며, 이 키는 부모 테이블인 'customer'를 참조하고 있습니다.
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 | | | cust_unq_id | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 5 rows in set (0.04 sec)
ALTER TABLE로 두 번째 외래 키 추가하기
이제 아래와 같은 ALTER TABLE 쿼리를 사용하면 'cust_unq_id' 필드에 새로운 외래 키 제약 조건을 추가하여 부모 테이블인 'customer2'를 참조하도록 만들 수 있습니다.
mysql> Alter table orders1 add FOREIGN KEY(cust_unq_id) REFERENCES Customer2(Cust_unq_id); Query OK, 0 rows affected (0.25 sec) Records: 0 Duplicates: 0 Warnings: 0 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 | | | cust_unq_id | int(11) | YES | MUL | NULL | | +--------------+-------------+------+-----+---------+-------+ 5 rows in set (0.06 sec)
위 결과 집합을 보면 Key 열에 'Cust_id'와 'cust_unq_id' 두 필드 모두 MUL로 표시된 것을 확인할 수 있습니다. 이는 'orders1' 테이블에 두 개의 외래 키 제약 조건이 설정되었음을 의미합니다. 즉, 하나는 'cust_id'를 통해 'customer' 테이블을 참조하고, 다른 하나는 'cust_unq_id'를 통해 'customer2' 테이블을 참조하게 됩니다.
이처럼 MySQL에서는 ALTER TABLE ... ADD FOREIGN KEY 구문을 활용하면 기존 테이블에 손쉽게 여러 개의 외래 키를 추가할 수 있으며, 이를 통해 테이블 간의 참조 무결성을 더욱 견고하게 유지할 수 있습니다.