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

Win10 IPv6 远程桌面连接(小米路由器) 背景 由于家里是移动网,且懒得向运营商要公网IPv4,所以想着用IPv6试一下。 家里的环境是这样的: 宽带用的是移动的,没有公网IPv4,但经过测试发现IPv6是公网的 上网通过光猫拨号,而不是通过路由器 路由器是小米AC2100 光猫更改为桥接模式 路由器必须要通过PPPoE拨号,如果是光猫拨号,那么要找对应的维护人员辅助你把光猫改成桥接模式。通过PPPoE拨号路由器就能够拿到公网的IPv6网段,也就可以给底下的其他服务分配公网IPv6了。而如果是光猫拨号,那么只有路由器可以拿到公网的IP。其他的设 阅读详情

业务需求:用户表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`))

CATIA文件的网页预览方案 CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览? 阅读详情

相关推荐

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8951

进阶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

C#集成Bartender:动态图片标签打印的实战与优化

本文详细介绍了在C#程序中集成Bartender实现动态图片标签打印的实战方法与优化策略。通过具名数据源绑定、图片对象尺寸控制等核心技巧,解决了动态图片显示/隐藏的难题,并提供了从模板设计、代码架构到性能优化、错误处理的全流程指南,帮助开发者构建稳定高效的工业级标签打印系统。

weixin_29216957的博客 431

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

多对多,联合主键

m0_71647221的博客 643

带隙基准电路实战:温度补偿与流片调优全解析

带隙基准(BGR)是模拟芯片中实现高精度、低温漂电压参考的核心电路,其本质是利用硅材料禁带宽度的物理稳定性,通过PTAT(正温度系数)与CTAT(负温度系数)电压的加权叠加抵消温度影响。原理上需兼顾一阶线性补偿与二阶曲率校正,技术价值在于支撑ADC/DAC/LDO等关键模块的精度与可靠性。典型应用场景涵盖车规级MCU、工业传感器和高精度电源管理芯片。工程落地难点集中于工艺偏差、运放失调、寄生效应及版图热电耦合——这正是‘带隙基准设计’与‘带隙基准调优’的根本分野。本文聚焦真实流片经验,深入拆解Widlar架

weixin_42628280的博客 254

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

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

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

weixin_42445051的博客 2700

鸿蒙OpenHarmony技术:【Docker编译环境】

OpenHarmony为开发者提供了两种Docker环境,以帮助开发者快速完成复杂的开发环境准备工作。独立Docker环境:适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。基于HPM的Docker环境:适用于使用HPM工具进行发行版编译的场景。点击或者复制转到。表1Docker镜像介绍系统类型运行平台Docker镜像仓库标签标准系统(独立Docker环境)3.2小型系统(独立Docker环境)3.2轻量系统(独立Docker环境)3.2。

m0_62167422的博客 1445

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

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

DevOps海洋的渔夫@专栏 4390

STM32 使用IQmath实现SVPWM

文章目录SVPWMIQMATHIQmathLib测试部分程序附件 SVPWM SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。 具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形; 关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦

好了,关于 【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。1、手动下载对应版本到 pyenv-win\install_cache 目录(如上手动操作安装步骤,文件名需匹配,如 python-3.10.0-amd64.exe)。该指令会列出,pyenv包管理工具所支持的所有python版本,

Spring Boot-Common On With You 852

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

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

weixin_42515089的博客 1912

NX二次开发点通过云配准获取相同体

先找到体的参考方向(这个参考方向对于相同体重合之后是相同的),这个时候我们的思路是三个不共线的点确定一个坐标系,然后和绝对方向求转换矩阵。然后获取体的所有边的几何中心,把这些点通过转换矩阵转换之后存起来,再和另外一个体转换之后的点数据作对比,在误差范围内配对点的数量等于体获取点的数量就是相同体

qq_39541524的博客 1646

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

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

weixin_39968760的博客 332

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

weixin_42362885的博客 367

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

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

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、付费专栏及课程。

余额充值