前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?

MySQL 外码约束原理:如何解决数据库添加数据时产生的外码(外键)约束?

作者头像
白鹿第一帅
发布2022-11-30 14:13:28
2.9K0
发布2022-11-30 14:13:28
举报

文章目录


前言

我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?本篇文章带你进一步来深度剖析,并带着你的思路来设计解决方案。

在这里插入图片描述
在这里插入图片描述

说明:本次案例的案例情景是传统的数据库表:学生-课程数据库

一、插入新数据时报错外键约束?

我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束,插入命令如下:

insert into course(cno,cname,cpno,ccredit) values('1','数据库','5',4);

二、对于出错 SQL 语句的分析

我们先根据 Course 表的定义,看哪一个是外键,查看 Course 表定义的 SQL 语句如下:

create table course (
cno char(4) primary key,
cname char(40),
cpno char(4),
ccredit smallint,
foreign key cpno references course(cno));

从上面的 SQL 语句可以看出,cpno 是外键,而且引用的是本表的主键 cno。

三、对于外码约束的分析

我们根据数据库定义的参照完整性规则得知:外键 cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。

但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。

四、如何处理外键约束?

  • 插入数据的时候,所有的 cpno 字段暂时都置为 null,所有数据插入以后,再依次更新这些数据的 cpno 的值。该方法的优点是复杂性低,容易实现。
  • 插入数据的时候,不是按表中 cno 的顺序插入,而是根据数据依赖的关系插入数据。比如,根据表里的数据,分析得出可以按 cno=2、6、4、7、5、1、3 的顺序插入数据。

总结

本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。本文提到的数据库参照完整性规则是数据库设计的基础知识,大家切记要重视基础,活学活用,方能在开发中百战不殆!

在这里插入图片描述
在这里插入图片描述

我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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