Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL外键
SQL外键
作者:--    发布时间:2019-11-20 09:23:20

在本教程中,将学习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约束创建和删除外键。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册