SQL 表关联关系、外键、级联操作 完整技术笔记

发布时间:2026/9/24 0:07:21

SQL 表关联关系、外键、级联操作 完整技术笔记 一、表之间三种关联关系数据库设计中实体与实体分为一对一、多对一、多对多。1. 一对一场景用户表、用户详情表一张表拆分成两张一一对应。关系规则A表一条记录只能对应B表一条记录。实现方式任意一张表添加外键同时给外键添加 unique 唯一约束保证一条数据只能绑定另表一条记录。-- user 用户主表createtableuser(idintprimarykeyauto_increment,usernamevarchar(20));-- user_info 用户详情表外键user_id加unique实现一对一createtableuser_info(idintprimarykeyauto_increment,addrvarchar(50),user_idintunique,-- unique 关键保证一对一foreignkey(user_id)referencesuser(id));2. 多对一一对多⭐最常用场景学生和班级多个学生属于同一个班级一个班级包含多名学生。关系规则多方学生增加外键引用一方班级的主键。实现在多的那一侧建立外键。-- 一方班级表createtableclasses(class_idintprimarykeyauto_increment,class_namevarchar(30));-- 多方学生表多方放外键 cidcreatetablestudents(stu_numintprimarykey,stu_namevarchar(20),cidint,foreignkey(cid)referencesclasses(class_id));3. 多对多场景学生 - 课程一个学生选多门课一门课被多个学生选。关系规则两张主表不能直接加外键新建一张中间表关联表中间表分别持有两张主表的外键。中间表主键可以使用两个外键做联合主键。-- 学生表createtablestudent(sidintprimarykeyauto_increment,snamevarchar(20));-- 课程表createtablecourse(cidintprimarykeyauto_increment,cnamevarchar(20));-- 中间表 student_course 实现多对多createtablestudent_course(sidint,cidint,-- 设置联合主键避免重复选课primarykey(sid,cid),foreignkey(sid)referencesstudent(sid),foreignkey(cid)referencescourse(cid));二、外键约束基础外键用于维护两张表之间的参照关系子表的外键字段引用父表的主键保证数据引用完整性。父表被引用的表示例classes班级表子表持有外键的表示例students学生表在默认外键约束下如果子表还有记录引用父表主键不允许直接修改、删除父表对应的记录会抛出错误。-- 尝试修改父表主键子表存在引用执行报错updateclassessetclass_id5whereclass_nameJava2104;-- 尝试删除父表记录子表存在引用执行报错deletefromclasseswhereclass_id1;报错信息ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails三、不使用级联手动分步处理没有配置级联规则时若必须修改父表主键需要手动解除关联再操作分为三步将子表关联记录的外键设置为null切断参照关系修改父表的主键字段将子表外键重新更新为父表新主键值-- 步骤1子表对应外键置 null解除和父表的关联updatestudentssetcidnullwherecid1;-- 步骤2修改父表班级主键idupdateclassessetclass_id5whereclass_nameJava2104;-- 步骤3子表数据重新绑定父表新idupdatestudentssetcid5wherestu_numin(20210101,20210102,20210103);缺点流程繁琐需要人工维护两张表的数据容易漏改造成脏数据。四、级联操作级联操作给外键定义联动规则父表主键发生更新、删除时数据库自动处理子表关联数据。级联选项行为说明on update cascade父表主键更新子表外键同步自动更新on delete cascade父表记录删除子表关联记录同步删除on update set null父表主键更新子表外键设置为 null子表字段必须允许为nullon delete set null父表记录删除子表外键设置为 nullrestrict默认子表存在引用禁止修改/删除父表抛出1451错误4.1 给已有表添加带级联的外键已有旧外键需要先删除旧约束再重新创建带级联的外键。-- 删除原来的外键约束altertablestudentsdropforeignkeyFK_STUDENTS_CLASSES;-- 重建外键配置级联更新、级联删除altertablestudentsaddconstraintFK_STUDENTS_CLASSESforeignkey(cid)referencesclasses(class_id)onupdatecascadeondeletecascade;4.2 级联更新演示配置完成修改父表主键子表外键自动跟随变化不需要手动操作子表。-- 修改父表班级idupdateclassessetclass_id5whereclass_id1;-- 查询学生表原来cid1的数据会自动变成cid5select*fromstudents;4.3 级联删除演示执行父表删除语句子表所有关联记录会被一起删除。-- 删除父表班级该班级下全部学生记录同步被删除deletefromclasseswhereclass_id5;五、⚠️ 开发注意事项on delete cascade风险很高删除父表会连带清除子表业务数据极易发生误删事故生产环境谨慎使用。子表外键与父表被引用主键数据类型、长度必须完全一致否则外键创建失败。如果使用set null模式子表的外键字段必须设置允许null语法才可以生效。很多业务项目不在数据库层面建立物理外键改为业务代码逻辑维护表关联关系规避级联带来的数据安全问题。
延伸阅读

更多相关文章

2026/9/19 23:54:19

Kimi暂停订阅后,如何通过API与本地部署构建替代方案

1. 项目概述:当Kimi按下暂停键,我们如何继续前行?最近,Kimi智能助手暂停了新用户的订阅服务,这个消息让不少依赖其长文本处理和代码分析能力的朋友感到措手不及。特别是对于开发者、内容创作者和研究者而言&#xff0c…

2026/9/24 0:05:21

校园二手数码小程序搭建实战:订单状态机与信用体系设计

毕业季那会儿,我在学校论坛里看到好几个帖子都在转闲置的iPad、相机和游戏本。有人挂了一周没人问,有人刚发帖就被秒拍,中间差的不是价格,而是“可信任”这三个字。校外二手平台上骗子多、到手刀多,同校交易又缺少一个…

2026/9/24 0:05:21

虚假新闻检测多模态融合实战:文本+结构化+统计特征联合建模

简介:本资源是一套基于Python实现的虚假新闻多模态检测高分课程设计项目,面向计算机专业本科生及AI初学者,解决社交媒体中图文混合内容的真实性判别问题,适用于期末大作业、课程设计与入门级科研实践。压缩包共39个文件&#xff0…

2026/9/24 0:05:21

Python深度学习回归实战:从Keras基线到物理约束网络

简介:这份资源面向具备一定Python基础、希望系统实践深度学习回归与序列建模的学习者,围绕神经网络在连续变量预测中的应用展开,涵盖全连接网络、循环神经网络及LSTM等模型在时间序列预测、股票与汇率走势预测、气候变化预测等场景下的实现思…

2026/9/24 0:00:21

Windows系统安装全指南:从U盘启动盘制作到UEFI/GPT分区方案

不管是给老电脑续命,还是给新装的机器做首次引导,Windows系统的安装都属于那种“看着简单,做起来全是细节”的活儿。我前前后后帮同事、朋友装了不下几十台机器,自己也因为手贱删错分区、改了引导方式导致安装失败过好多次&#x…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码