MySql多对多关系中外键的应用

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码) 本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。 阅读详情

业务需求:用户表r_user保存用户名等信息。现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系。(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)

设计方案:

方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_user_base的外键user_id。通过r_user中的id,在r_user_base表中load该用户的所有工作基地。

方案二:建立一张个基地表base_info保存目前存在的所有基地,再建一张user_base关系表。如图所示,关系表user_base有两个外键user_id与base_id 

方案一的特点是,只需要键一张表就可以完成业务需求。缺点是不够模块化,如果在其它地方还要用到基地信息,则还要再建基地表

 

方案二的特点是,用一张关系表连接两张信息表。便于信息表的维护与重复利用。

 

基于业务需求与以后扩展及重用性考虑,采用方案二实现需求。

 

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。

外键的使用条件:

1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);

2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 

3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

 

外键的定义语法:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

    REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

 cascade方式 

   在父表上update/delete记录时,同步update/delete掉子表的匹配记录 
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用 。

 set null方式 

   在父表上update/delete记录时,将子表上匹配记录的列设为null 

   要注意子表的外键列不能为not null 

   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用 
No action方式 

 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持 
Restrict方式 

  同no action, 都是立即检查外键约束 

建立人员信息表:

复制代码

1 CREATE TABLE `r_user` (
2   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3   `NAME` varchar(20) DEFAULT NULL,
4   `PASSWORD` varchar(50) DEFAULT NULL,
5   `STAFF_NUM` varchar(20) DEFAULT NULL,
6    `USER_NAME` varchar(20) DEFAULT NULL,
7   PRIMARY KEY (`id`),
8   ) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8 

复制代码

建立基地信息表

复制代码

1 CREATE TABLE `branch_info` (
2   `ID` bigint(20) NOT NULL AUTO_INCREMENT,
3    `BRANCH_CODE` varchar(255) DEFAULT NULL,
4   `BRANCH_DESC` varchar(255) DEFAULT NULL,
5   PRIMARY KEY (`ID`)
6 ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 

复制代码

关系表:

复制代码

1 CREATE TABLE `user_work_base` (
2   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3   `version` int(11) NOT NULL,
4   `user_id` bigint(20) NOT NULL ,
5   `base_id` bigint(20) NOT NULL ,
6   PRIMARY KEY (`id`),
7   CONSTRAINT `user_work_base_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
8   CONSTRAINT `user_work_base_ibfk_2` FOREIGN KEY (`base_id`) REFERENCES `branch_info` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
9 ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8

复制代码

 

删除人员r_user表中人员A,关系表user_base自动删除A的关系数据。

 

如果外键使用Restrict方式,只删除A,则报错。

Cannot delete or update a parent row: a foreign key constraint fails (`maircrew`,`user_work_base`, CONSTRAINT `FK41EB46D32AA89EA0` 

FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`))

RV1126 MIPI CSI-2驱动RGB888图像采集的V4L2实战解析 本文详细解析了在RV1126平台上通过MIPI CSI-2接口采集RGB888格式图像的完整V4L2实战流程。核心内容包括设备树(DTS)配置、内核驱动适配、Media Controller链路调试,以及使用v4l2-ctl工具进行图像抓取与验证的方法,旨在帮助开发者打通从硬件连接到稳定采集RGB888图像数据的关键环节。 阅读详情

相关推荐

Arch Linux双系统安装避坑指南:从Windows分区到桌面环境全流程

本文提供了一份详尽的Arch Linux与Windows双系统安装避坑指南。内容涵盖从安装前的UEFI环境确认、BitLocker处理、分区规划,到Live环境进入、基础系统安装、GRUB引导配置,再到显卡驱动安装、KDE/GNOME桌面环境部署及中文化设置的全流程。重点解决了双系统安装中的核心痛点,帮助用户在不破坏现有Windows系统的前提下,顺利完成Arch Linux的安装。

nice1的博客 535

进阶Django(三):模型外键、多对多关系、自关联外键及Meta类

目录 前言 模型中的映射关系 1 物理外键与逻辑外键 2 Django中的外键(一对一、一对多关系) 3 Django中的多对多关系 3.1 使用ManyToManyField自动建立多对多关系 3.2 另一种建立多对多表的方式 3.3 多对多关系的建立与查询 4 自关联外键 5 外键删除时 Model的Meta内部类 使用Model时遇到的一些问题 1 使用mysql报错 Did you install mysqlclient? 2 You are trying to ad

AugustTheodor的博客 6693

HFSS仿真中如何提取最大E/H场强与频率关系曲线

本文详细讲解了在HFSS仿真中提取最大E/H场强与频率关系曲线的完整流程。通过使用场计算器(Field Calculator)和创建场报告,工程师可以准确获得器件在整个频带内的电场或磁场强度峰值,并进一步推导出关键的功率容量曲线,为高功率射频器件(如滤波器、耦合器)的设计提供至关重要的安全评估依据。

ss78901的博客 1099

数据库约束的补充(多对多的外键,联合主键)

多对多,联合主键

m0_71647221的博客 643

从Zemax到Speos:HUD设计数据无缝迁移避坑指南(含STEP文件精度验证)

本文详细介绍了从Zemax到Speos的HUD设计数据无缝迁移方法,重点解决Zernike曲面参数保真、虚拟厚度设置和坐标系对齐等核心问题。通过STEP文件精度验证和工程化解决方案,帮助工程师避免数据迁移中的常见陷阱,提升HUD系统设计效率。适用于Ansys Zemax和Ansys Speos用户,优化光学性能验证流程。

h6i7j8的博客 1064

Innovus ECO技巧:用setEcoMode+ecoAddRepeater实现批量buffer替换的5个关键步骤

本文详细介绍了在Cadence Innovus工具中,利用setEcoMode与ecoAddRepeater命令实现高效、批量Buffer/Inverter替换的工程化策略。通过启用批处理模式、构建可维护的替换规则、掌握高级定位技巧以及规避布线陷阱等5个关键步骤,帮助芯片设计工程师在ECO阶段大幅提升修改效率与质量,确保设计稳定签核。

d6e7f8的博客 1119

Mysql数据库基本操作(五)多表关系与外键

一,多表关系 多表关系有三种,一对一,一对多,多对多 1,一对一关系:A表与B表通过一个字段对应,例如学生表和身份证表,一个学生只有一个身份证,一个身份证也只代表了一个学生。在实际开发环境中没必要使用一对一的关系,遇到一对一的关系不如直接将两个表一对一合并。 2,一对多关系:A表中的一个字段可以对应B表中的多个字段,例如部门表和员工表,一个部门可以对应多个员工,但是一员工只对应一个部门,这种多表关系很常见。 3,多对多关系:A表中的多个字段可以与B表的多个字段对应,例如学生表和选课表,一个学生可以选多门

weixin_42445051的博客 2700

Windows安装ros2(Jazzy版本+win10/win11)-1.配置windows终端

更高版本的terminal可能设置里更加丰富, 有默认以管理员身份启动的选项等,可自行配置。打开微软应用商店, 在其中搜索并下载 Terminal 即可(注意别挂梯子)下载并安装, 安装的位置自行替换,建议别放到系统盘中。点击任务栏中的搜索, 输入store。

weixin_48398592的博客 1454

多表间的关系-一对多-多对多-一对一-外键约束

11. 多表间的关系-一对多-多对多-一对一-外键约束1. 表关系概述 现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,用户和订单、订单和商品、学生和课程等等。那么...

DevOps海洋的渔夫@专栏 4390

【android bluetooth 案例分析 01】【HiCar 详解 3】【hicar时如何交换Wifi参数的】

如果直接使用 L2CAP(不经过 RFCOMM),会需要额外的协议来保证可靠性,而 RFCOMM 天然支持。BLE 广播的数据长度受限(31 字节 / 255 字节扩展),不适合传输复杂的 Wi-Fi 连接参数。使用 RFCOMM 传输参数,可以兼容不同厂商的车机和手机,而无需依赖特殊的蓝牙功能。手机解析这些参数,并使用 Wi-Fi Direct 连接到车机。,然后才能让 Wi-Fi Direct 进行真正的数据传输。,适合传输 Wi-Fi 连接参数等关键数据。,可以安全地交换 Wi-Fi 连接信息。

奔跑吧 android 的博客 1740

搜索神器Perplexity的详细使用方法(持续更新)

本文主要介绍了ChatGPT的互补工具Perplexity的详细使用方法,希望对新手有所帮助。需要说明的是,Perplexity不需要上网工具,很方便新手和小白上手使用。Perplexity的官网链接为:https://www.perplexity.ai/ 。 文章目录 1. 为什么要讲Perplexity? 2. 详细使用方法 2.1 使用要点一 2.2 使用要点二 2.3 使用要点三

herosunly的博客 8万+

mysql多个外键的使用_MySql多对多关系中外键的应用

业务需求:用户表r_user保存用户名等信息。现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系。(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)设计方案:方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_use...

weixin_42515089的博客 1912

[Dify]-进阶5- 使用 Dify 构建多轮对话的客服机器人

本文介绍了如何利用Dify平台构建智能客服系统,重点阐述了ChatFlow框架的应用。系统支持多轮对话、业务接口集成和话术策略管理,具备订单查询、退货申请等核心功能。通过Classifier节点实现意图识别,借助Router节点分流处理流程,并结合API插件实现业务数据对接。文章还提供了部署调试、会话优化和监控分析的具体方法,强调模块化设计和插件化集成的重要性,为构建功能完善的智能客服系统提供了完整解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1660

mysql一对多除了外建还可以用吗_MySql多对多关系中外键的应用

业务需求:用户表r_user保存用户名等信息。现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系。(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)设计方案:方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_use...

weixin_39968760的博客 332

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mysql外键的三种关系_mysql外键的三种关系实例详解

本文实例讲述了mysql外键的三种关系。分享给大家供大家参考,具体如下:因为有foreign key的约束,使得两张表形成了三种了关系:多对一多对多一对一一对多或多对一多对一create table press(id int primary key auto_increment,name varchar(20));create table book(id int primary key auto_...

weixin_42297904的博客 209

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql 表的外键约束_mysql外键约束及表关系(三)

mysql是关系型数据库,关系数据库,是建立在关系模型基础上的数据库,现实世界中的各种实体,以及实体之间的各种联系,均用关系模型(table)来表示。关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。实体:就是数据对象 (可以是有型的,也可以是无型的);E-R 图 (实体关系模型)image.pngE-R图也称实体-联系图(Entity Relation...

weixin_42362885的博客 367

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

MySQL之外键

目录一:MySQL外键1.1.定义一张员工表2.上述表不合理之处3.将上述表拆分成两张表4.外键二:如何查找表关系1.查找表的关系2.多对一:(示例图)3.查找表关系:换位思考三:多对一(外键)实战1.创建表(书籍关联表)2.添加写入数据四:外键约束1.外键约束问题2.如何删除或修改被关联表五:级联更新 级联删除1.创建表必须先创建(被关联表)2.存储数据(先写入被关联表)六:多对多1.以书籍表...

sunliusen的博客 59

mysql外键检查的作用_浅谈mysql的外键作用

今天主要是要理顺一下mysql中的外键作用。首先理清几个概念:1、在mysql中,只有innodb引擎才有外键功能,myisam没有外键功能。2、本表中的外键是另外一个表的主键3、外键、主键都是表的索引(key,或者index),这点很重要,一对一关系就是用外键的唯一索引来做的。4、如果A表有一个字段ID(主键),B表有一个映射到A表的外键A_ID字段。那么,我们称B表是从表(子表),A表是主表(...

weixin_33796288的博客 436

mysql一对一外键约束_07-MySQL外键约束以及表条件

知识要点:外键约束要求一对多表关系一对一表关系多对多表关系外键约束的参照操作mysql 介绍mysql是关系型数据库,关系数据库,是建立在关系模型基础上的数据库,现实世界中的各种实体,以及实体之间的各种联系,均用关系模型(table)来表示。#关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。​# 实体:就是数据对象 (可以是有型的,也可以是无型的)E-...

weixin_30995967的博客 261

MYSQL外键约束简单总结

mysql 外键约束的总结 外键约束注重理解 笛卡尔积 [1,2,3] [a,b,c] 1a,2a,3a,1b,2b,3b,1c,2c,3c 总结:表关系的作用 把相同的数据抽离出来 作为一个单独的表来使用 更方便与维护 外键约束:用来把两张表的关系 关联起来 用来约束列的数据的 要使用外键约束:1.被引用的表 一定要有主键(只有主键才能被引用)2.引用表的列和被引用表的主键 类型一...

qq_40127785的博客 345

mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

1.外键: 用来建立两张表之间的关系- 一对多- 多对多- 一对一研究表与表之间的关系:1.定义一张 员工部门表id, name, gender, dep_name, dep_desc- 将所有数据存放在一张表中的弊端:1.结构不清晰 ---> 不致命2.浪费空间 ---> 不致命3.可扩展性极差 ---> 不可忽视的弊端- 类似于将所有python代码存放在一个py文件中,...

weixin_39611413的博客 1542

浅谈mysql的外键作用

今天主要是要理顺一下mysql中的外键作用。 首先理清几个概念: 1、在mysql中,只有innodb引擎才有外键功能,myisam没有外键功能。 2、本表中的外键是另外一个表的主键 3、外键、主键都是表的索引(key,或者index),这点很重要,一对一关系就是用外键的唯一索引来做的。 4、如果A表有一个字段ID(主键),B表有一个映射到A表的外键A_ID字段。那么,我们称B表是从表(...

weixin_30954607的博客 114

MySQL对象之约束(实践二)

第1章 约束介绍与实践环境 1.1 约束的简介 约束的作用是保证数据的正确性和一至性,它是在mysql层面来实现的(它是mysql的功能/对象)。其实数据的正确性和一致是开发人员和DBA人员一起来实现的。约束只是保证数据正确性和一至性的一个方面。约束分为以下几类: 非空约束(not null) 字段级别 https://editor.youkuaiyun.com/md/?articleId=105958957 默认约束(default) 字段级别 https://editor.

chenliang 415

MySQL外键约束与多表查询全解析

本文介绍了SQL中的外键约束和多表关系。主要内容包括:外键约束的语法和使用方法;三种表关系(一对一、一对多、多对多)的特点及实现方式;五种多表查询方式(交叉连接、内连接、外连接、自连接、子查询)的语法和应用场景。重点讲解了内连接、左外连接、右外连接的区别以及自连接的实现方式,并配有示意图帮助理解各种连接查询的效果。通过学习可以掌握数据库表间关系的设计方法以及多表查询的实际应用技巧。

qq_53491885的博客 642

mysql 父表 外键列,mysql 之外键,复制表,以及列的操作

1.外键:建立关联表(从表) 与 被关联表(主表)之间的关系2.外键的三种对应关系:一对多,一对一,多对多3.语法及规则语法及规则:外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)规则:创建原则:先创建被关联表(主表),在创建关联表(从表); 删除更新原则(无联级删除):先删除、更新关联表中的关联的数据,再删除被关联的表中的数据级联删...

weixin_35219046的博客 393
上一篇: mysql外键理解
下一篇: java基础——super关键字
big_bit
博客等级 码龄11年 67粉丝 40原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值