我们如何在多列上分配 FOREIGN KEY 约束?
短信预约 -IT技能 免费直播动态提醒
MySQL允许我们在表中的多个列上添加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)
我们已经有一个名为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 查询,我们可以在引用父表“customer2”的字段“cust_unq_id”上添加另一个外键约束
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”外键约束上。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341