SQL 外键:如何在 SQL Server 中创建外键(附示例)
什么是外键?
A 外键 提供了一种在 SQL Server 中强制执行引用完整性的方法。简而言之,外键确保一个表中的值必须存在于另一个表中。
FOREIGN KEY 规则
- SQL 外键中允许 NULL。
- 被引用的表称为父表
- SQL中带有外键的表称为子表。
- 子表中的 SQL 外键引用父表中的主键。
- 这种父子关系强制执行了被称为“参照”的规则 Integrity设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“
下面的 SQL 示例中的外键图表总结了外键的所有上述要点

如何在 SQL 中创建外键
我们可以创建一个 外键 在 SQL 服务器中 2种方式:
- SQL Server Management Studio中
- T-SQL
SQL Server Management Studio中
父表: 假设我们有一个现有的父表“课程”。Course_ID 和 Course_name 是两列,其中 Course_Id 为主键。
子表: 我们需要创建第二个表作为子表。'Course_ID' 和 'Course_Strength' 作为两列。但是,'Course_ID' 应为外键。
步骤1) 右键单击“表格”>“新建”>“表格…”
步骤2) 输入两个列名“Course_ID”和“Course_Strength”。右键单击“Course_Id”列。现在单击关系。
步骤3) In '外键关系,' 点击 '加'
步骤4) 在“表和列规范”中单击 '…' 图标
步骤5) 从下拉菜单中选择“主键表”为“COURSE”,并将现在创建的新表选择为“外键表”。
步骤6) “主键表”——选择“Course_Id”列作为“主键表”列。
“外键表”- 选择“Course_Id”列作为“外键表”列。单击“确定”。
步骤7) 点击 添加。
步骤8) 将表名称指定为“Course_Strength”,然后单击 确定。
结果: 我们已经设定了父子关系 '课程' 和 ‘课程强度’
T-SQL:使用 T-SQL 创建父子表
父表: 重新考虑,我们有一个现有的父表,其表名为“课程”。
Course_ID 和 Course_name 是两列,其中 Course_Id 为主键。
子表: 我们需要创建第二张表作为子表,名称为“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) 单击“执行”来运行查询。
结果: 我们已经设定了父子关系 '课程' 和 ‘课程强度_TSQL。’
使用 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;
现在让我们在 Child 表中插入一些行: ‘课程强度_TSQL。’
我们将尝试插入两种类型的行
- 第一种类型,子表中的 Course_Id 将存在于父表中的 Course_Id。即 Course_Id = 1 和 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');
结果: 让我们一起运行查询来查看我们的父表和子表
Course_strength 表中存在 Course_ID 为 1 和 2 的行。然而,Course_ID 5 是个例外。
总结
- 外键的每个值都必须是 首要的关键 其他表格。
- - MySQL 外键可以引用同一张表中的另一列。这种引用称为自引用。
- SQL 外键约束:用于保护表之间的链接以及插入到外键列中的无效数据。
- 您可以使用 Create Table、Alter Table 或 SQL Server Management Studio中.
- 以下是主键与外键之间的区别: 了解更多