1. 什么是外键
外键是一种关系数据库中的约束条件,它用于确保数据在表之间的完整性。它是两个表之间的关系,其中一个表中的一个或多个列值必须与另一个表中的一个列值相匹配。外键通常用于在一个表中引用另一个表的数据。外键被称为“外部键”,因为它们链接到其他表中的数据,以便数据能够在表之间共享。
2. 如何添加外键
2.1 创建表格
添加外键之前,我们需要创建表格。下面是一个我们将要使用的示例表格。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
这个表格包含了三个列,其中order_id被指定为主键。
2.2 创建引用表格
在添加外键之前,我们需要创建一个引用表格用于存储我们将引用的列。
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
city VARCHAR(50)
);
这个表格包含了三个列,其中customer_id也被指定为主键。
2.3 添加外键
添加外键之前,我们需要确定哪些列将充当外键。在本示例中,我们将使用orders表中的customer_id列作为外键。
我们需要在orders表格中创建一个外键约束,它将customer_id列链接到customers表格中的customer_id列。
ALTER TABLE orders
ADD CONSTRAINT FK_orders_customer_id
FOREIGN KEY (customer_id) REFERENCES customers (customer_id);
在上述命令中,我们指定了一个名称为FK_orders_customer_id的外键约束,它链接到orders表格中的customer_id列,并将其链接到customers表格中的customer_id列。
3. 外键的细节
3.1 外键的类型
外键有两种类型:单向和双向。单向外键仅允许从参照表格引用到被参照表格,而双向外键允许从每个表格引用到另一个表格。在SQL Server中,只有单向外键是允许的。
3.2 在表格中删除外键
如果需要在表格中删除外键,可以使用以下命令:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
在上述命令中,table_name是需要删除外键的表格名称,constraint_name是外键约束的名称。
3.3 在表格中禁用外键
如果需要在表格中禁用外键而不是删除它,可以使用以下命令:
ALTER TABLE table_name
NOCHECK CONSTRAINT constraint_name;
在上述命令中,table_name是需要禁用外键的表格名称,constraint_name是外键约束的名称。
3.4 检查外键是否存在
如果需要检查表格中是否存在外键,可以使用以下命令:
SELECT OBJECT_NAME(object_id) AS Name,
type_desc AS Type
FROM sys.objects
WHERE object_id IN (
SELECT object_id
FROM sys.foreign_keys
WHERE parent_object_id = OBJECT_ID('table_name')
);
在上述命令中,table_name是需要检查外键的表格名称。
3.5 外键的命名规则
在SQL Server中,外键的名称必须唯一且符合以下命名规则:
以“FK_”作为前缀,表示外键约束
后缀为两个下划线和一个数字,用于唯一标识外键约束
例如,在本文的示例中,外键的名称为“FK_orders_customer_id”。
4. 总结
外键是一种关系数据库中的约束条件,它用于确保数据在表之间的完整性。在SQL Server中,我们可以使用ALTER TABLE命令来添加、删除、禁用和检查外键。外键的名称必须唯一且符合特定的命名规则。