SQL 外键:如何在 SQL Server 中创建外键(附示例)

什么是外键?

A 外键 提供了一种在 SQL Server 中强制执行引用完整性的方法。简而言之,外键确保一个表中的值必须存在于另一个表中。

FOREIGN KEY 规则

  • SQL 外键中允许 NULL。
  • 被引用的表称为父表
  • SQL中带有外键的表称为子表。
  • 子表中的 SQL 外键引用父表中的主键。
  • 这种父子关系强制执行了被称为“参照”的规则 Integrity设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“

下面的 SQL 示例中的外键图表总结了外键的所有上述要点

SQL 中 FOREIGN KEY 的规则
外键如何工作

如何在 SQL 中创建外键

我们可以创建一个 外键 在 SQL 服务器中 2种方式:

  1. SQL Server Management Studio中
  2. T-SQL

SQL Server Management Studio中

父表: 假设我们有一个现有的父表“课程”。Course_ID 和 Course_name 是两列,其中 Course_Id 为主键。

在 SQL 中创建外键

子表: 我们需要创建第二个表作为子表。'Course_ID' 和 'Course_Strength' 作为两列。但是,'Course_ID' 应为外键。

步骤1) 右键单击“表格”>“新建”>“表格…”

在 SQL 中创建外键

步骤2) 输入两个列名“Course_ID”和“Course_Strength”。右键单击“Course_Id”列。现在单击关系。

在 SQL 中创建外键

步骤3) In '外键关系,' 点击 '加'

在 SQL 中创建外键

步骤4) 在“表和列规范”中单击 '…' 图标

在 SQL 中创建外键

步骤5) 从下拉菜单中选择“主键表”为“COURSE”,并将现在创建的新表选择为“外键表”。

在 SQL 中创建外键

步骤6) “主键表”——选择“Course_Id”列作为“主键表”列。

“外键表”- 选择“Course_Id”列作为“外键表”列。单击“确定”。

在 SQL 中创建外键

步骤7) 点击 添加。

在 SQL 中创建外键

步骤8) 将表名称指定为“Course_Strength”,然后单击 确定。

在 SQL 中创建外键

结果: 我们已经设定了父子关系 '课程'‘课程强度’

在 SQL 中创建外键

T-SQL:使用 T-SQL 创建父子表

父表: 重新考虑,我们有一个现有的父表,其表名为“课程”。

Course_ID 和 Course_name 是两列,其中 Course_Id 为主键。

使用 T-SQL 创建父子表

子表: 我们需要创建第二张表作为子表,名称为“Course_Strength_TSQL”。

'Course_ID' 和 'Course_Strength' 作为子表 Course_Strength_TSQL 的两列。'但是,'Course_ID' 应为外键。

以下是使用 FOREIGN KEY 创建表的语法

语法:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

以下是上述参数的说明:

  • childTable 是要创建的表的名称。
  • column_1, column_2- 要添加到表中的列。
  • fkey_name- 要创建的外键约束的名称。
  • child_column1、child_column2…child_column_n- chidTable 列的名称,用于引用 parentTable 中的主键。
  • parentTable- 子表中要引用其键的父表的名称。
  • parent_column1, parent_column2, … parent_column3- 组成父表主键的列。
  • ON DELETE。可选参数。它指定删除父数据后子数据会发生什么情况。此参数的一些值包括 NO ACTION、SET NULL、CASCADE 或 SET DEFAULT。
  • ON UPDATE - 可选参数。它指定在更新父数据后对子数据进行的操作。此参数的一些值包括 NO ACTION、SET NULL、CASCADE 或 SET DEFAULT。
  • NO ACTION-与 ON DELETE 和 ON UPDATE 一起使用。这意味着在更新或删除父数据后,子数据不会发生任何事情。
  • CASCADE-与 ON DELETE 和 ON UPDATE 一起使用。在父数据被删除或更新后,子数据将被删除或更新。
  • SET NULL-与 ON DELETE 和 ON UPDATE 一起使用。父级数据被更新或删除后,子级将被设置为 null。
  • SET DEFAULT- 与 ON DELETE 和 ON UPDATE 一起使用。在父数据被更新或删除后,子数据将被设置为默认值。

让我们看 SQL 示例中的外键,创建一个以一列作为外键的表:

SQL 示例中的外键

查询:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

步骤1) 单击“执行”来运行查询。

SQL 中的外键

结果: 我们已经设定了父子关系 '课程'‘课程强度_TSQL。’

SQL 中的外键

使用 ALTER TABLE

现在我们将学习如何在 SQL 中使用外键,并使用 ALTER TABLE 语句在 SQL 服务器中添加外键,我们将使用下面给出的语法:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

以下是上面用到的参数的说明:

  • childTable 是要创建的表的名称。
  • column_1, column_2- 要添加到表中的列。
  • fkey_name- 要创建的外键约束的名称。
  • child_column1、child_column2…child_column_n- chidTable 列的名称,用于引用 parentTable 中的主键。
  • parentTable- 子表中要引用其键的父表的名称。
  • parent_column1, parent_column2, … parent_column3- 组成父表主键的列。

修改表添加外键示例:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

我们在部门表上创建了一个名为 fkey_student_admission 的外键。此外键引用学生表的入学列。

示例查询 FOREIGN KEY

首先,让我们看看我们的父表数据,COURSE。

查询:

SELECT * from COURSE;

示例查询 FOREIGN KEY

现在让我们在 Child 表中插入一些行: ‘课程强度_TSQL。’

我们将尝试插入两种类型的行

  1. 第一种类型,子表中的 Course_Id 将存在于父表中的 Course_Id。即 Course_Id = 1 和 2
  2. 第二种,子表中的 Course_Id 在父表中的 Course_Id 中不存在。即 Course_Id = 5

查询:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

示例查询 FOREIGN KEY

结果: 让我们一起运行查询来查看我们的父表和子表

Course_strength 表中存在 Course_ID 为 1 和 2 的行。然而,Course_ID 5 是个例外。

示例查询 FOREIGN KEY

总结

  • 外键的每个值都必须是 首要的关键 其他表格。
  • - MySQL 外键可以引用同一张表中的另一列。这种引用称为自引用。
  • SQL 外键约束:用于保护表之间的链接以及插入到外键列中的无效数据。
  • 您可以使用 Create Table、Alter Table 或 SQL Server Management Studio中.
  • 以下是主键与外键之间的区别: 了解更多