SQL 外键

SQL Server 外键约束用于实现表之间的关系。为了规范化数据,我们使用此关系拆分表。在拆分数据时,我们需要一个引用,我们称之为外键关系。

在开始 SQL Server 外键示例之前,您应该记住以下几点。

  • 您可以将外键列与另一个列中的主约束或唯一约束列链接。
  • 您输入到约束列中的值应与引用的列匹配。否则,它将引发错误。
  • 您可以定义 SQL Server 外键关系与同一数据库和服务器中的表。您可以使用触发器提供交叉引用完整性。
  • 它允许您定义与同一表中的另一列的关系。这种关系是自引用的。
  • 您不能删除具有此关系关系的表。

例如,Employee 表有 Employee ID,Orders 表有 Orders 信息和 Emp ID。请记住,此 Emp ID 与 Employee 表中的 Employee ID 列相关。本次演示,我们以 Department 为例。

创建 SQL Server 外键

我们可以使用 Transact 查询和 Management Studio 来创建外键。

通过 Transact 查询创建

如何使用 Transact 语句创建外键?在这里,我们将通过连接 tblDepartment 来创建此约束以创建表。

CREATE TABLE [dbo].[tblEmployee](
	[EmpID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
	[FirstName] [nvarchar](255) NULL,
	[LastName] [nvarchar](255) NULL,
	[Education] [nvarchar](255) NULL,
	[YearlyIncome] [float] NULL,
	[Sales] [float] NULL,
	[DeptID] [int] NULL,
	CONSTRAINT [FK_tblDepartment_tblEmployee_DeptID] FOREIGN KEY([DeptID])
		REFERENCES [dbo].[tblDepartment] ([ID])
) 
GO

我们在表创建的末尾添加了 CONSTRAINT 语句。请参阅 创建表主键唯一约束触发器 以及 引用完整性SQL Server 中。

我将使用 SP_HELP 过程来检查表定义和约束。

SQL Foreign Key 3

查看我们新创建的。您也可以使用对象资源管理器来实现相同目的。要做到这一点,请展开 tblEMployee,然后展开 Keys 文件夹。

view SQL foreign Key in Object Explorer 4

在现有表上创建

此示例向您展示了在现有表上添加 SQL Server 外键的步骤。为此,我们将创建一个新表。

CREATE TABLE [dbo].[tblEmployee](
	[EmpID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
	[FirstName] [nvarchar](255) NULL,
	[LastName] [nvarchar](255) NULL,
	[Education] [nvarchar](255) NULL,
	[YearlyIncome] [float] NULL,
	[Sales] [float] NULL,
	[DeptID] [int] NULL
) 
GO
Messages
--------
Command(s) completed successfully.

现在让我添加约束。在这里,我们使用了 Alter Table 来更改内容,并使用 ADD Constraint 语句来添加约束。

ALTER TABLE [dbo].[tblEmployee]  
ADD CONSTRAINT [FK_tblDepartment_tblEmployee_DeptID] FOREIGN KEY([DeptID])
			REFERENCES [dbo].[tblDepartment] ([ID])
Messages
--------
Command(s) completed successfully.

使用查询删除 SQL 外键

请注意,您不能使用查询来修改外键约束。要修改现有约束,您必须先删除(或删除)然后重新创建它。请使用 DROP Constraint 和 ALTER TABLE 语句来删除或丢弃外键。

ALTER TABLE [dbo].[tblEmployee]  
DROP CONSTRAINT [FK_tblDepartment_tblEmployee_DeptID]

在此示例中,我们将向您展示如何使用 Management Studio 创建。为此,请转到对象资源管理器。接下来,请展开 Database 文件夹,然后选择您要创建的表。接下来,右键单击它将打开上下文菜单。请选择 Design 选项。

它将在设计模式下打开相应的表。右键单击 DeptID 列,然后选择 Relationships 选项。

Assign Relationships to Columns

如您所见,没有现有的关系。请单击 Add 按钮添加新关系。

选择 Add 选项后,SSMS 将为您创建它。

Foreign Key 14

接下来,单击 Tables and Columns Specification 选项旁边的 Browse 按钮。此属性用于指定两者之间的关系。

Choose the Table and Columns Specific Options

我们将 Primary 选择为 tblDepartment,Column 选择为 ID。

Primary and Foreign Key table Column

接下来,我们选择了 tblEmployee,列为 Dept ID。

Tables and Columns Relationship

使用 Management Studio 修改 SQL 外键

要在 Management Studio 中修改,请转到 Database 文件夹,选择表,然后转到 Keys 文件夹。接下来,右键单击名称并选择 Modify 选项。

Modify the Foreign Key

单击 Modify 选项将以设计模式打开相应的表,以及 Relationships 窗口。

Relationships

使用 Management Studio 删除 SQL 外键约束

展开 Database 文件夹,选择包含约束的表,然后转到 Keys 文件夹。接下来,右键单击名称并选择 Delete 选项。

Delete Foreign Key Constraint in Object Explorer

选择 Delete 选项后,将打开 Delete Object 窗口。单击 OK 删除约束。

Delete Object Window

您可以在对象资源管理器中看到没有外键。

Open Object Explorer to see the Constraints

要删除外键,请在对象资源管理器中展开 Database 文件夹。右键单击表名,然后单击 Design 选项。接下来,选择 Relationships 选项以打开此窗口。现在,请选择它,然后单击 Delete 按钮。

Delete the Foreign Key