实际上 FOREIGN KEY 是一列或几列的组合,可用于设置两个表中数据之间的链接。换句话说,我们可以说 FOREIGN KEY 约束与两个表相关。它还用于增强数据完整性,因为表的主键链接到其他表的外键。
语法
FOREIGN KEY [column_name] REFERENCES [table having Primary Key] ([column_name]);
这里REFERENCES是一个关键字; column_name 是要设置 FOREIGN KEY 的列的列表;具有主键的表是包含主键的表的名称; column_name 是已设置 PRIMARY KEY 的列的列表。
示例
假设我们有两个表“Customer”和“Orders”。两个表之间的关系可以通过字段“Cust_Id”指定的表“orders”中的外键建立。创建两个表的查询如下 -
mysql> Create Table Customer(Cust_ID int Primary Key, First_name Varchar(20), Last_name Varchar(20), City Varchar(10));
Query OK, 0 rows affected (0.13 sec)
mysql> Create Table Orders(Order_Id Int Primary Key, Product_Name Varchar(25), Orderdate DATE, Cust_ID Int, FOREIGN KEY(Cust_ID) REFERENCES Customer(Cust_id));
Query OK, 0 rows affected (0.13 sec)
mysql> Describe Orders;
+--------------+-------------+------+-----+---------+-------+
| 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 | |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
这里,表“Customer”称为父表或引用表,表“Orders”称为子表或引用表。子表中的行必须包含父表中存在的值。例如,表“orders”中的每一行都必须具有“customer”表中存在的“Cust_Id”。