Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีกำหนด FOREIGN KEY constraint บนหลายคอลัมน์

MySQL อนุญาตให้เพิ่ม FOREIGN KEY constraint บนหลายคอลัมน์ในตาราง เงื่อนไขคือ Foreign Key แต่ละตัวใน child table ต้องอ้างอิงถึง parent table ที่ต่างกัน

ตัวอย่าง

สมมติว่ามีตาราง 'customer2' ที่มี Primary Key บน 'cust_unq_id':

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       |       |
+-------------+-------------+------+-----+---------+-------+

ตาราง orders1 มี Foreign Key บน '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    |       |
+--------------+-------------+------+-----+---------+-------+

เพิ่ม Foreign Key constraint อีกตัวบน '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)

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    |       |
+--------------+-------------+------+-----+---------+-------+

ตาราง 'orders1' มี Foreign Key 2 ตัว: บน 'cust_id' และ 'cust_unq_id'