SQL Foreign Key 外键
在关系数据库中,Foreign Key 外键 是用于在两个表之间建立链接的字段或列。
简而言之,您可以说,一个表中的外键用于指向另一个表中的主键。
让我们举个例子来解释一下:
这里有两个表,第一个是学生表,第二个是订单表。
学生表:
S_Id | LastName | FirstName | CITY |
---|---|---|---|
1 | MAURYA | AJEET | ALLAHABAD |
2 | JAISWAL | RATAN | GHAZIABAD |
3 | ARORA | SAUMYA | MODINAGAR |
订单表:
O_Id | OrderNo | S_Id |
---|---|---|
1 | 99586465 | 2 |
2 | 78466588 | 2 |
3 | 22354846 | 3 |
4 | 57698656 | 1 |
注意:您可以看到“订单”表中的“S_Id”列指向“学生”表中的“S_Id”列。
- “Students”表中的“S_Id”列是“Students”表中的PRIMARY KEY。
- “Orders”表中的“S_Id”列是“Orders”表中的 FOREIGN KEY。
外键约束通常是防止破坏表之间链接的操作。
外键约束还可以防止在外键列中输入无效数据。
一、CREATE TABLE 上的 SQL FOREIGN KEY 约束
创建“Orders”表时在“S_Id”列上创建外键:
MySQL:
CREATE TABLE orders
(
O_Id int NOT NULL,
Order_No int NOT NULL,
S_Id int,
PRIMAY KEY (O_Id),
FOREIGN KEY (S_Id) REFERENCES Persons (S_Id)
)
SQL Server /Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMAY KEY,
Order_No int NOT NULL,
S_Id int FOREIGN KEY REFERENCES persons (S_Id)
)
二、ALTER TABLE 的 SQL FOREIGN KEY 约束
如果 Order 表已经创建并且您想在“S_Id”列上创建 FOREIGN KEY 约束,您应该编写以下语法:
在单列上定义外键约束:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY(S_Id)
REFERENCES Students (S_Id)
三、删除外键约束的语法
如果要删除 FOREIGN KEY 约束,请使用以下语法:
MySQL:
ALTER TABLE Orders
ROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
四、SQL 主键和外键 的区别
下面 是 SQL 中主键和外键之间的一些重要区别
- 主键不能为空,而外键可以为空。
- 主键始终是唯一的,而外键可以重复。
- 主键唯一标识一个表中的一条记录,而外键是一个表中的一个字段,它是另一个表中的主键。
- 表中只有一个主键,另一方面,表中可以有多个外键。
- 默认情况下,主键会添加一个聚集索引,另一方面,外键不会自动创建索引,无论是聚集的还是非聚集的。您必须手动为外键创建索引。
热门文章
优秀文章