SQL 外键
在关系数据库中,外键是用于在两个表之间建立联系的字段或列。
简单来说,一个表中的外键用于指向另一张表中的主键。
我们来举个例子来解释一下:
这里有两张表,第一张表是学生表,第二张表是订单表。
这里的订单是由学生提出的。
第一张表:
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 |
- 这里可以看到,“Orders”表中的“S_Id”列指向“Students”表中的“S_Id”列。
- “Students”表中的“S_Id” 列是“Students”表中的主键。
- “Orders”表中的“S_Id”列是“Orders”表中的外键。
外键约束通常防止破坏表之间链接的操作。
它还防止无效数据输入外键列。
SQL CREATE TABLE 语句内的FOREIGN KEY约束:
(在单个列上定义外键约束)
在创建“Orders”表时,在“S_Id”列上创建一个外键:
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)
)
SQL ALTER TABLE的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)
删除外键约束的语法:
如果您想删除一个外键约束,可以使用以下语法:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
在SQL中主键和外键的区别:
以下是主键和外键在SQL中的一些重要区别 –
主键不能为null,而外键可以为null。
主键始终是唯一的,而外键可以重复。
主键唯一地标识表中的记录,而外键是另一个表中的主键字段。
表中只有一个主键,而可以有多个外键。
默认情况下,主键自动添加一个聚集索引,而外键不会自动创建索引,无论是聚集索引还是非聚集索引。您必须为外键手动创建索引。