前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三十四、外键约束

三十四、外键约束

作者头像
喵叔
发布2021-06-29 11:34:35
1.8K0
发布2021-06-29 11:34:35
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏
一、参照完整性

参照完整性要求关系中不允许引用不存在的实体。在 MySQL 中设置参照完整性的方式是使用 外键约束 。所谓外键就是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。例如,有学生表和分数表两个表,表内容如下。

student 学生表:

stu_no

name

phone

2021001

张三

123456789

2021002

李四

987654321

score 分数表:

score_no

stu_no

gross_score

1

2021001

750

2

2021002

685

在分数表中有 stu_no 列存储的是学生表中的学生编号,当我们把这个字段设置为分数表的外键字段后,插入一条不存在的学生的分数将会报错。例如插入一条stu_no 编号为 2021003 的学生的分数,这时 MySQL 将会报错。这是因为在学生表中不存在编号为 2021003 的学生,如果想插入成功则必须现在学生表中创建编号为 2021003 这个学生后再向分数表插入这个学生的分数。

二、外键约束

上一小节提到了外键约束,那么什么是外键约束呢?外键约束是用于保持主表(父表)和从表(子表)的数据一直。在 MySQL 中只有 InnoDB 存储引擎支持外键约束。外键约束的语法如下:

代码语言:javascript
复制
[CONSTRAINT [symbol]] FOREIGRN KEY [index_name] (col_name,...) REFERENCES tbl_name(col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

在语法中 reference_option 指的是外键约束条件,外键约束条件包括如下五种选项:

  1. RESTRICT:拒绝对父表的删除或更新操作;
  2. CASCADE:从父表删除或更新时自动删除或更新子表中匹配的行;
  3. SET NULL:从父表删除或更新时自动设置子表对应的外键列为NULL;
  4. NO ACTION: 不采取任何动作;
  5. SET DEFAULT:使用默认约束

例子: 前述的学生表的分数表可以这样创建:

代码语言:javascript
复制
# 创建学生表
create table student(
    stu_no varchar(30) not null primary key,
    name varchar(30),
    phone varchar(30)
) engine=InnoDB
# 创建分数表,设置 stu_no 为外键
create table score(
    score_no int not null auto_increment primary key,
    stu_no varchar(30),
    gross_score int,
    foreign key(stu_no) references student(stu_no)
) engine=InnoDB
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、参照完整性
  • 二、外键约束
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档