MySQL多表操作的外键约束教程
大家好,今天本人给大家带来文章《MySQL多表操作的外键约束教程》,文中内容主要涉及到约束、多表、Mysql外键,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!
一.多表关系
MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多
一对一关系
一个学生只有一张身份证;一张身份证只能对应一学生。
在任一表中添加唯─外键,指向另一方主键,确保一对一关系。
一般一对一关系很少见,遇到一对一关系的表最好是合并表。

一对多/多对一关系
部门和员工
分析:一个部门有多个员工,一个员工只能对应一个部门实现原则:在多的一方建立外键,指向一的一方的主键

多对多关系
学生和课程
分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
原则:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,拆成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来的那两张表的主键

二.外键约束
MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等4种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

特点
定义一个外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
创建外键约束
方式1-在创建表时设置外键约束
在create table语句中,通过foreign key关键字来指定外键,具体的语法格式如下:



use world; -- 创建部门表 create table if not exists dept( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 ); -- 创建员工表 create table if not exists emp2( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员工名字 age int, -- 员工年龄 dept_id varchar(20), -- 员工所属部门 constraint emp2_fk foreign key (dept_id) references dept(deptno) );
方式2-在创建表时设置外键约束
外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。


use world; -- 创建部门表 create table if not exists dept( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 ); -- 创建员工表 create table if not exists emp2( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员工名字 age int, -- 员工年龄 dept_id varchar(20), -- 员工所属部门 constraint emp2_fk foreign key (dept_id) references dept(deptno) );
在外键约束下的操作
1.数据插入

2.删除数据

3.删除外键约束
当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表间的关联关系
格式

实现

外键约束-多对多关系
在多对多关系中,A表的一行对应B的多行,B表的一行对应A表的多行,我们要新增加一个中间表,来建立多对多关系。

操作


修改和删除时,中间从表可以随便删除和修改,但是两边的主表受从表依赖的数据不能删除或者修改。
以上就是《MySQL多表操作的外键约束教程》的详细内容,更多关于mysql的资料请关注golang学习网公众号!
深入了解Go语言中web框架的中间件运行机制
- 上一篇
- 深入了解Go语言中web框架的中间件运行机制
- 下一篇
- MySQL中列转行和行转列总结解决思路
-
- 甜蜜的羊
- 好细啊,码起来,感谢作者大大的这篇文章,我会继续支持!
- 2023-03-17 08:13:57
-
- 狂野的砖头
- 这篇文章内容真是及时雨啊,太细致了,太给力了,mark,关注楼主了!希望楼主能多写数据库相关的文章。
- 2023-03-16 18:48:50
-
- 开放的万宝路
- 很棒,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢博主分享技术贴!
- 2023-03-16 07:35:54
-
- 幸福的面包
- 这篇文章内容真及时,大佬加油!
- 2023-03-15 14:39:15
-
- 数据库 · MySQL | 11小时前 | MySQL · SQL · GROUP_CONCAT · mysql group_concat group_concat_max_len
- MySQL GROUP_CONCAT 结果被截断怎么处理
- 470浏览 收藏
-
- 数据库 · MySQL | 12小时前 | MySQL · 任务队列 · SKIP LOCKED · 并发消费 ·
- MySQL 多个消费者怎么用 SKIP LOCKED 领取任务
- 184浏览 收藏
-
- 数据库 · MySQL | 13小时前 | MySQL · 索引优化 · generated-column · mysql 索引 生成列 计算字段
- MySQL 怎么用生成列保存可索引的计算结果
- 297浏览 收藏
-
- 数据库 · MySQL | 18小时前 |
- MySQL LEFT JOIN 怎么统计数量并保留零记录
- 477浏览 收藏
-
- 数据库 · MySQL | 19小时前 | SQL查询 · 子查询 · MySQL教程 · NULL判断 · mysql NOT IN NOT EXISTS
- MySQL NOT IN 查不到数据是不是 NULL 导致的
- 413浏览 收藏
-
- 数据库 · MySQL | 21小时前 |
- MySQL 按天统计怎么补齐没有数据的日期
- 177浏览 收藏
-
- 数据库 · MySQL | 22小时前 | MySQL · JSON查询 · JSON_TABLE · mysql JSON数组 JSON_TABLE
- MySQL JSON 数组怎么展开成多行查询
- 490浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 166次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 90次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 10次使用
-
- LangGPT
- LangGPT是一种受编程语言启发的结构化提示词设计工具,提供双层框架、模块化模板及变量功能,帮助用户高效编写高质量Prompt。该项目已在GitHub免费开源,适用于内容创作、编程辅助等多场景。
- 27次使用
-
- ClickPrompt
- ClickPrompt是一款专为AI提示词编写者设计的开源在线工具,支持Stable Diffusion绘图、ChatGPT对话及GitHub Copilot代码辅助。提供Prompt自动生成、一键运行、社区分享及可视化优化功能,帮助用户高效获取精准AI输出。
- 56次使用
-
- golang Gorm与数据库完整性约束详解
- 2022-12-27 294浏览
-
- MySQL学习之完整性约束详解
- 2023-01-07 137浏览
-
- MySQL数据库的约束限制详解
- 2023-01-09 185浏览
-
- MySQL数据库的多表操作
- 2023-01-07 470浏览
-
- SQL语句实现多表查询
- 2022-12-29 205浏览

