MySQL ช่วยให้เราสามารถเพิ่มข้อจำกัดของ FOREIGN KEY ได้มากกว่าหนึ่งฟิลด์ในตาราง เงื่อนไขคือแต่ละ Foreign Key ในตารางย่อยต้องอ้างอิงถึงตารางหลักที่แตกต่างกัน
ตัวอย่าง
สมมติว่าเรามีตาราง 'customer2' ซึ่งมีข้อ จำกัด ของคีย์หลักในฟิลด์ '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 | | +-------------+-------------+------+-----+---------+-------+ 5 rows in set (0.06 sec)
และเรามีคำสั่งตาราง1 ซึ่งมีข้อจำกัดของคีย์ต่างประเทศอยู่แล้วในฟิลด์ 'Cust_id' ที่อ้างอิงถึงตารางหลัก 'ลูกค้า'
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 เราสามารถเพิ่มข้อจำกัดของคีย์ต่างประเทศอื่นในฟิลด์ '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)
จากชุดผลลัพธ์ข้างต้น จะสังเกตได้ว่าตาราง 'orders1' มีสองตาราง อันหนึ่งอยู่ที่ 'cust_id' และอีกอันบน 'cust_unq_id' ข้อจำกัดของคีย์ภายนอก