SQL外键

在本教程中,将学习SQL外键以及如何创建FOREIGN KEY约束以强制表之间的关系。

1. SQL外键约束简介

外键是一列或一组列,用于强制两个表中的数据之间的链接。 在外键引用中,第一个表的主键列(或多个列)由第二个表的列(或列)引用。 第二个表的列(或列)成为外键。

在创建或更改表时,可以使用FOREIGN KEY约束创建外键。 下面来看一个简单的例子以更好地理解。

2. SQL FOREIGN KEY约束示例

请参阅以下project表和project_assignments表:

CREATE TABLE projects (
    project_id INT AUTO_INCREMENT PRIMARY KEY,
    project_name VARCHAR(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL
);

CREATE TABLE project_milestones(
    milestone_id INT AUTO_INCREMENT PRIMARY KEY,
    project_id INT,
    milestone_name VARCHAR(100)
);

每个项目可能有零个或多个里程碑,而一个里程碑必须属于一个且只有一个项目。 使用这些表的应用程序必须确保project_milestones表中的每一行都在projects表中存在相应的行。 换句话说,没有项目就不可能存在里程碑。

不幸的是,用户可能使用客户端工具编辑数据库,或者如果应用程序中存在错误,则可能会在project_milestones表中添加一行,该行不对应于项目表中的任何行。 或者用户可以删除项目表中的行,在project_milestones表中留下孤立的行。 这会导致应用程序无法正常工作。

解决方案是向project_milestones表添加SQL FOREIGN KEY约束,以强制执行project表和project_milestones表之间的关系。

可以在创建表时创建FOREIGN KEY约束,如下所示:

CREATE TABLE project_milestones (
    milestone_id INT AUTO_INCREMENT PRIMARY KEY,
    project_id INT,
    milestone_name VARCHAR(100),
    FOREIGN KEY (project_id)
        REFERENCES projects (project_id)
);

FOREIGN KEY子句将project_milestones表的project_id设置为引用project表的project_id列的外键。

FOREIGN KEY (project_id)
        REFERENCES projects (project_id)

可以为FOREIGN KEY约束指定名称,如下所示:

CREATE TABLE project_milestones (
    milestone_id INT AUTO_INCREMENT PRIMARY KEY,
    project_id INT,
    milestone_name VARCHAR(100),
    CONSTRAINT fk_project FOREIGN KEY (project_id)
        REFERENCES projects (project_id)
);

hk_projectFOREIGN KEY约束的名称。将FOREIGN KEY约束添加到现有表
,要向现有表添加FOREIGN KEY约束,请使用ALTER TABLE语句。

ALTER TABLE table_1
ADD CONSTRAINT fk_name FOREIGN KEY (fk_key_column)
   REFERENCES table_2(pk_key_column)

假设project_milestones列已经存在,但是没有任何预定义的外键,如果想要为project_id列定义FOREIGN KEY约束。 为此,请使用以下ALTER TABLE语句:

ALTER TABLE project_milestones
ADD CONSTRAINT fk_project FOREIGN KEY(project_id)
   REFERENCES projects(project_id);

3. 删除外键约束

要删除外键约束,还要使用ALTER TABLE语句,如下所示:

ALTER TABLE table_name
DROP CONSTRAINT fk_name;

如果使用的是MySQL,则可以使用更清晰的语法,如下所示:

ALTER TABLE table_name
DROP FOREIGN KEY fk_name;

例如,要删除fk_project外键约束,请使用以下语句:

ALTER TABLE project_milestones
DROP CONSTRAINT fk_project;

在本教程中,我们介绍了外键概念,并演示了如何使用SQL FOREIGN KEY约束创建和删除外键。


猿狮妹
2021-11-26
SQL 外键 在线教程
热门教程
1 SQL复制表 如果要将SQL表复制到同一数据库中的另一个表中,可以使用select语句。从一个表复制到另一个表的语法如下:SELECT * INTO FROM 例如,可以使用以下语句将hr_employee表的记录复制到employee表中。SELECT * INTO employee FROM hr_employee;注意:SELECT INTO与INSERT INTO语句完全不同...
2 SQL Max()函数 在本教程中,您将学习如何使用SQL Max函数查找组中的最大值。1. SQL MAX函数简介SQL提供MAX()函数,用于在一组值中查找最大值。 以下是MAX函数的语法。MAX(expression)MAX函数忽略NULL值。与SUM,COUNT和AVG函数不同,DISTINCT选项不适用于MAX函数。2. SQL MAX函数示例...
3 SQL Sum()函数 在本教程中,我们将演示如何使用SQL SUM函数,此函数计算所有值或不同值的总和。1. SQL SUM函数简介SQL SUM函数是一个聚合函数,它返回所有或不同值的总和。需要注意的是,只能将SUM函数应用于数字列。以下说明了SUM函数的语法。SUM([ALL|DISTINCT] expression)ALL运算符用于将聚合应用于所有值。 SUM函数默认使用ALL运算符。例如,如果有一组集合值:(1,2,3,3,NULL)。 使用SUM函数将返回9,请注意,SUM函...
4 SQL Insert语句 在本教程中,我们将学习如何使用SQL INSERT语句来将数据插入表中。1. SQL INSERT语句简介SQL提供了INSERT语句,用于将一行或多行插入表中。 INSERT语句用于:向表中插入一行向表中插入多行将行从一个表复制到另一个表中。...
5 SQL Count()函数 本教程将向您展示如何使用SQL COUNT函数来获取组中的项目数。1. SQL COUNT函数简介SQL COUNT函数是一个聚合函数,它返回符合条件行数。 可以使用SELECT语句中的COUNT函数来获取员工数量,每个部门的员工数量,指定工作岗位的员工数量等。以下是SQL COUNT函数的语法:COUNTC ([ALL | DISTINCT] expression);COUNT函数的结果取决于传递给它的参数。默认情况下,COUNT函数使用ALL关键字,无论是否...
6 SQL Update语句 在本教程中,您将学习如何使用SQL UPDATE语句来修改表中现有行的数据。
7 SQL Order By排序 本教程将演示如何使用SQL ORDER BY子句根据指定的标准按升序或降序对结果集进行排序。1. SQL ORDER BY子句简介当使用SELECT语句查询表中的数据时,结果集中显示的行的顺序可能与您的预期不符。在某些情况下,结果集中显示的行按其物理存储在表中的顺序排列。 但是,如果查询优化器使用索引来处理查询,则行记录将显示为它们以索引键顺序存储。 因此,结果集中的行顺序未确定或不可预测。查询优化器是数据库系统中的内置软件组件,用于确定SQL语句查询请求数据的最有效方...
8 SQL自连接 本教程将向您展示如何使用SQL自连接技术将表连接到自身。1. SQL自连接简介有时,将表连接到自身是很有用的。 这种类型的连接称为自连接。我们将一张表连接到自身来评估同一个表中其他行的行。 要执行自联接,我们使用内连接或左连接子句。因为同一个表在单个查询中出现两次,所以必须使用表别名。 以下语句说明了如何将表连接到自身。...
9 SQL检查约束 在本教程中,将学习如何使用SQL CHECK约束来验证基于布尔表达式的列或一组列中的数据。1. SQL CHECK约束简介CHECK约束是SQL中的完整性约束,它允许您指定列或列集中的值必须满足布尔表达式。您可以在单个列或整个表上定义CHECK约束。 如果在单个列上定义CHECK约束,则CHECK约束仅检查此列的值。 但是,如果在表上定义CHECK约束,则会根据同一行的其他列中的值限制列中的值。...
10 SQL Delete语句 在本教程中,您将学习如何使用SQL DELETE语句删除表中的一行或多行。1. SQL DELETE语句简介要从表中删除一行或多行,请使用DELETE语句。 DELETE语句的一般语法如下:
  • Copyright © 2021 猿狮院, All rights reserved.