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

MySQL에서 여러 열에 FOREIGN KEY 제약 조건을 추가하는 방법

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 구문을 활용하면 기존 테이블에 손쉽게 여러 개의 외래 키를 추가할 수 있으며, 이를 통해 테이블 간의 참조 무결성을 더욱 견고하게 유지할 수 있습니다.