MySQL_约束、多表关系
约束
-
概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。
-
目的:保证数据库中数据的正确性,有效性和完整性。

-
约束演示
#定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 int 类型,主键并且自动递增; #name 表示姓名,不为空; #age 表示年龄,18-30岁之间; #gender 表示性别; #study_status 表示学习状态,0表示挂科,1表示通过,默认是 1 CREATE TABLE student(sn int AUTO_INCREMENT PRIMARY KEY,name varchar(10) not null,age int check(age >= 18 && age <=30),gender char(1),study_status TINYINT DEFAULT 1 )COMMENT '学生表'; SELECT * FROM student; #添加一点学生数据 insert into student (name,age,gender,study_status) values('sy',18,'男',1); insert into student (name,age,gender,study_status) values('sy',18,'男',1); insert into student (name,age,gender,study_status) values(null,18,'男',1); insert into student (name,age,gender,study_status) values('sy',31,'男',1); insert into student (name,age,gender) values('werewr',30,'男');
外键约束
-
概念:用户建立两张表之间的联系的,为了保证数据的一致性和完整性的。

-
注意上面创建的时候没有使用外键真正的来管理数据,可能会存在数据的丢失
-
添加外键(主表就是数据不能随意改变的表)
1.创建表创建外键 CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)); 2.添加外键ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;-
案例:为emp表的dept_id字段添加外键约束,关联department表的主键id
alter table emp add constraint fk_emp_dept_id FOREIGN key (dept_id) REFERENCES department(id);
-
-
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;-
案例:删除刚才添加的外键
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id;
-
-
删除更新外键
-
添加了外键之后尼,再删除父表数据时产生约束行为,就称为删除和更新行为。

-
语法
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE; -
案例:CASCADE(父表会删除或者更新子表中的外键数据)
ALTER TABLE emp add constraint fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES department(id) on update cascade on delete cascade; -
案例:SET NULL
ALTER TABLE emp add constraint fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES department(id) ON UPDATE SET NULL ON DELETE SET NULL;
-
一对一关系
-
用户和用户详情
-
关系:一对一的关系
-
用途:用于单表拆分,将一张表的基础字段放在一张表中,其它字段放在另一张表中,可以提升查询效率
-
实现:在任意一张表里面添加外键,关联另一张表的主键

CREATE TABLE `user_detail` (`id` int NOT NULL AUTO_INCREMENT,`university` varchar(255) DEFAULT NULL,`car` varchar(255) DEFAULT NULL,`hourse` varchar(255) DEFAULT NULL,`user_id` int NOT NULL UNIQUE, // 唯一约束PRIMARY KEY (`id`) USING BTREE,KEY `u_id` (`user_id`),CONSTRAINT `u_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
一对多关系
-
案例:部门和员工关系
-
关系:一个部门对应多个员工,一个员工对应一个部门
-
实现:在多的一方建立外键,指向一的一方的主键

多对多的关系
-
案例:角色和菜单的关系,学生和老师
-
关系:一个学生可以有多个老师,一个老师可以有多个学生
-
实现:建立三方表,中间表来包含两个表的主键(需要创建中间表)

相关文章:
MySQL_约束、多表关系
约束 概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性,有效性和完整性。 约束演示 #定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 …...
在Qt中使用LoadLibrary无法加载DLL
Qt系列文章目录 文章目录 Qt系列文章目录前言一、问题分析 前言 最近因项目需要使用qt做开发,之前使用LoadLibrary加载dll成功,很庆幸,当一切都那么顺风顺水的时候,测试同事却发现,在windows平台上个别电脑上加载dll会…...
如何将区块链新闻稿发布到海外媒体?
随着区块链技术的不断发展,越来越多的区块链项目涌现出来,各大媒体也开始关注和报道区块链新闻。然而,如何将区块链新闻稿发布到海外媒体成为了许多区块链项目所面临的难题。本文将介绍一些有效的方法,帮助区块链项目将新闻稿发布…...
基于 CentOS 7 构建 LVS-DR 群集。
1.准备实验环境 本次实验我准备了4台虚拟机 DS:DIP--192.168.163.138 VIP--192.168.163.200 RIP1(web1)--192.168.163.140 RIP2(web2)--192.168.163.141 Client:user--192.168.163.142 2.配置服务器环境 1)搭建简易的web服务 RIP1 [rootlocalhost ~]# yum …...
防火墙组建双击热备后,点击管理对端设备,老是打不开,怎么办?
环境: 防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 防火墙组建双击热备后,点击管理对端设备,老是打不开,怎么办? 浏览器老是加载 解决方案: 1.打开设置查看双机连接的心跳接口是哪个端口 …...
【Kubernetes】Kubernetes之Pod详解
Pod 一、 Pod1. Pod 基础概念2. 在 Kubrenetes 集群中 Pod 使用方式2.1 pasue 容器2.2 kubernetes 中的 pause 容器提供的功能 3. Pod 的概念和结构组成4. Pod 的分类5. Pod 容器的分类5.1 基础容器(infrastructure container)5.2 初始化容器(…...
电商与客服系统完美对接指南源码-无缝对接唯一客服系统-提升电商客户体验...
提升电商客户体验,无缝对接唯一客服系统,助您商城腾飞! 在如今竞争激烈的电商领域,除了优质的商品和吸引人的价格,出色的客户服务同样不可或缺。一个高效的客服系统能够为您的电商商城带来更多的机会,建立顾…...
新知识:Monkey 改进版之 App Crawler
原生Monkey 大家知道Monkey是Android平台上进行压力稳定性测试的工具,通过Monkey可以模拟用户触摸屏幕、滑动、按键等伪随机用户事件来对设备上的程序进行压力测试。而原生的Android Monkey存在一些缺陷: 事件太过于随机,测试有效性大打折扣…...
黑马头条项目学习--Day3: 自媒体文章发布
Day3: 自媒体文章发布 Day3: 自媒体文章发布1) 素材管理-图片上传a) 前期微服务搭建b) 具体实现 2) 素材管理-图片列表a) 接口定义b) 具体实现 3) 素材管理-照片删除/收藏a) 图片删除a1) 接口定义a2) 代码实现 b) 收藏与取消b1) 接口定义b2) 代码实现 4) 文章管理-频道列表查询…...
使用frp实现内网穿透
1、介绍 当我们想把内网的一些资源暴露在公网上时,可以使用内网穿透功能。比如公司的内网服务器,部署了平时需要开发的项目,但是回到家中无法访问,就可以使用内网穿透,将公司内网的接口映射到一台公网的服务器上&a…...
安装 opendr 踩坑记
复现早期的优化算法需要用到opendr,踩坑一天记录!!! 测试是否成功安装的命令 >>> import opendr >>> opendr.demo("texture")失败案例 python 3.8.15 numpy1.23.0 mayavi4.8.1 chumpy0.70 cpython…...
各地区-各行业法人单位、区划数63个指标(2010-2022年)
一、数据介绍 数据名称:各地区-各行业法人单位、区划数63个指标 数据年份:2010-2022年(法人单位至2021年) 数据样本:404条 数据来源:自我整理 二、指标说明 行政区划代码 地区 长江经济带 经度 纬…...
W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)
前言 上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务器…...
web前端面试--递归(斐波那契数列)
web面试题 本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 文章目录 web面试题定义源码测试示例 之前去笔试&…...
Vue3 Props组件简单应用(父组件获取子组件数据)
去官网学习→Props | Vue.js 运行示例: 代码:App.vue <template><img alt"Vue logo" src"./assets/logo.png"><h2>Vue Props数据传递</h2><h4>子组件中的数据:{{ content }}</h4>…...
Mybatis查询
返回实体类,必须指定返回类型, resultType不能省略,并且数据库字段名与实体类不一致会填充NULL,实体类我们一般都是驼峰,数据库字段一般都是下划线,所以在查询的时候可以起别名解决,属性填充本质上调用的是…...
如何让ES低成本、高性能?滴滴落地ZSTD压缩算法的实践分享
前文分别介绍了滴滴自研的ES强一致性多活是如何实现的、以及如何提升ES的性能潜力。由于滴滴ES日志场景每天写入量在5PB-10PB量级,写入压力和业务成本压力大,为了提升ES的写入性能,我们让ES支持ZSTD压缩算法,本篇文章详细展开滴滴…...
[数据集][目标检测]PCB板缺陷目标检测数据集VOC格式693张6类别
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):693 标注数量(xml文件个数):693 标注类别数:6 标注类别名称:["missing_hole",…...
Linux 安装中文输入法
在linux安装ibus输入法 在linux安装ibus输入法 加入开机自启动 运行以下命令以编辑IBus配置文件:如果没有该文件,则可以创建一个新文件。 nano ~/.xprofile将以下内容添加到文件中:这些命令将设置相应的环境变量并启动IBus守护进程。 ex…...
redisson
redisson 使用 1,导入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.5</version> </dependency>2,创建配置类 package com.woniu.config;impor…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
