📜  SQL foreign-key

📅  最后修改于: 2020-11-11 09:43:28             🧑  作者: Mango

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

在这里,您可以看到“订单”表中的“ S_Id”列指向“学生”表中的“ S_Id”列。

  • “学生”表中的“ S_Id”列是“学生”表中的PRIMARY KEY。
  • “订单”表中的“ S_Id”列是“订单”表中的FOREIGN KEY。

外键约束通常是防止破坏表之间链接的操作。

它还可以防止无效数据输入外键列。

CREATE TABLE上的SQL FOREIGN KEY约束:

(在单列上定义外键约束)

在创建“订单”表时,在“ 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访问:

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)

DROP SYNTAX for FOREIGN KEY COSTRAINT:

如果要删除FOREIGN KEY约束,请使用以下语法:

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。

主键始终是唯一的,而外键可以复制。

主键唯一地标识表中的记录,而外键是表中的字段,而表中的字段是另一个表中的主键。

另一方面,表中只有一个主键,而表中可以有多个外键。

默认情况下,主键会添加聚簇索引,而外键不会自动创建聚簇或非聚簇索引。您必须手动为外键创建索引。