当前位置: 首页 > news >正文

MySQL表操作(进阶)

一、数据库约束

1、约束类型

NOT NULL - 指示某列不能存储 NULL 值

UNIQUE - 保证某列的每行必须有唯一的值

DEFAULT - 规定没有给列赋值时的默认值

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性

2、NOT NULL约束

创建列表的时候,指定某一列不为空

3、UNIQUE约束

指定某一列为唯一的,不重复的

不仅限制插入,也限制修改

该约束会让后续插入/修改数据的时候,都触发一次查询,通过这个查询来判断这个记录是否存在

4、DEFAULT约束

喵叔这一列的默认值,默认的默认值是null,可通过default约束来修改默认值

5、PRIMARY KEY约束

一张表里只能有一个primary约束

对带有主键的表来说,每次插入/修改也会触发先前查询的操作

auto_increment,把主键的生成交给数据库来执行

但是id的自动分配有一定的局限性

分布式系统生成唯一id的算法

时间戳+主机编号+随机因子

时间戳:格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 

主机编号:为了保证同一时间,添加到不同主机的商品编号是不同的

6、FOREIGN KEY约束

foreign key,外键约束,描述两个表的关联关系

若father表约束child表,则把father表称为父表,child称为子表

reference:引用,此处表明了该表的这一列数据应出自另一个表的哪一列

foreign key(name) reference father(name)子表的name应出自父表的name

若针对父表进行修改/删除操作,当前被操作的值被引用了这样的操作也会失败

外键约束要保持子表的数据在对应的父表中要存在,万一父表将数据修改了,就打破了约束

外键:两个列产生联系,其他列不受影响

想删除父表,若父表中的数据被引用了,是不能删除的

指定外键约束的时候,要求父表被关联的那一列是主键或unique

注:

数据库引入约束的时候,执行效率会受到影响,降低很多

数据库是比较慢的,很吃资源的系统,部署数据库的服务器容易成为一个系统的瓶颈

二、表的设计

根据实际的需求场景,明确当前要创建几个表,这些表是否存在一定的联系

梳理清楚需求的实体(对象),再确定好实体之间的关系

每个实体都需要安排一个表,表的列对应实体的各个属性

一对一:如一个学生只能有一个帐号,一个账号只能被一个学生拥有

一对多:一个同学只在一个班级里,一个班级有多个同学

多对多:一个同学可选多个课程,多个课程包含多个学生

插入搭配查询:将查询到的语句作为插入的数值

要求插入的结果集合列数/类型和插入的这个表匹配

三、聚合查询

相当于在行与行之间运算

通过聚合函数完成上述运算

1、聚合函数

count():查询行数,另外count(*)得到的结果可以被用来运算

若当前的列中有空值,两种方式[count(*)和count(列名)]计算的count就不同了

指定具体列可进行去重:count(dlistinct 列名)

Sum():仅回查询的数据总和,不是数字没有意义

avq():返回查询的数据平均值,不是数字无意义

max():返回查询的数据最大值,不是数字无意义

min():返回查询的数据最小值,不是数字无意义

sum(列名,列名...):把对应的列名相加,得到一个临时表,再把临时表的结果进行行与行的相加

2、group by

group by:进行分组,针对每个组再行聚合查询

若进行分组时不进行聚合,结果就是查询每一组的某个代表函数

往往还是搭配聚合函数来使用,否则这里的查询结果就没有意义(group by要搭配聚合函数使用)

select 列名,列名...from 表名 group by 指定列

指定列每组所记录的指定数据是相同的

使用group by,还可以搭配条件,但应区分清是该条件楚分组前的还是分组后的

分组之前的条件:直接使用where即可,where-般写在 group by 前面

分组之后的条件:用heaving来描述条件,heaving-般写在qroupby后面

同时完成以上两类条件的筛选

同时使用heaving 和 where,且 where 放在 group by 前,heaving 放后面

3、联合查询/多表查询

笛卡尔积是通过排列组合来得到个更大的表,列数是两个表的列数相加,行数是两个表的行数相乘

笛卡尔积是简单无脑的排列组合,把所有的可能都穷举了一遍,包含一些合法的数据,也包含非法、无意义的数据,进行多表查询的时候,需要把有意义的数据筛选出来,无意义的数据过滤

3.1、内连接

1、先对两个表进行笛卡尔积

2、加上连接条件

3、结合需求,进一步添加条件,针对结果进行筛选

4、针对查询到的结果进行精简,只保留需求中关心的列

select 字段 (聚合查询) from 表1 别名1,表2 别名2 where连接条件 and 其他条件 (group.by)

一旦表的数据量大或表的数目多,此时得到的笛卡尔积就非常庞大,针对大表进行笛卡尔积,就会生成大量的临时结果,非常耗时

如果多表查询间涉及的表数目非常多,此时sql就会非常复杂,可读性会大大降低

3.2、外连接

若两个表中,里面的记录存在对应关系,内连接和外连接的结果是一致的,若存在不对应的记录,内连接和外连接就会存在差别

左外连接就是以左侧表为是准,保证左侧表的每个数据都会出现在右侧表,若右侧表中不存在,对应的列就填成null

右侧表同理

相关文章:

MySQL表操作(进阶)

一、数据库约束 1、约束类型 NOT NULL - 指示某列不能存储 NULL 值 UNIQUE - 保证某列的每行必须有唯一的值 DEFAULT - 规定没有给列赋值时的默认值 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识&#xff…...

【设计模式】软件设计原则——接口隔离迪米特

接口隔离原则引出 接口隔离原则 定义:用多个专门的接口,不使用单一的总接口,客户端不应该依赖它不需要的接口; 一个类对另一个类的依赖,应该建立在最小接口上;如果有一个大接口,里面有很多方法,如果使用一个类实现该接口,所有的类都要实现,导致代码冗余;…...

【C++】——list的介绍和模拟实现

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …...

B树系列解析

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

docker 部署 WEB IDE

简介 问题描述:GitCode 的 Web IDE 不满足个人使用需求 如何解决:在本机或云服务器部署 Web IDE 如何解决 拉取容器镜像 docker pull coder/code-server 运行 docker run -d --name vscode -p 8080:8080 -p 8443:8443 -e PASSWORD"123456&quo…...

【Android】数据存储

本章介绍Android五种主要存储方式的用法,包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存,另外介绍重要组件之一的应用Application的基本概念与常见用法,以及四大组件之一的内容提供器ContentProvider的基本概念与常见…...

个人网络安全的几个重点与防御

1 浏览器 firefox 这是第一选择 如果你真的不明白可以找找各个浏览器漏洞 mail 的危险的 来自与代理和漏洞 浏览器溢出漏洞 实时注意更新就可以 2 防火墙 大家都用windows 只需在 gpedit.msc 设置 但有什么未知漏洞就不得而知了 因为美国的计划问题 网络端口溢出漏洞 但…...

python爬虫 - 初识爬虫

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 (一)HTTP请求与响应 &#xff0…...

tomcat版本升级导致的umask问题

文章目录 1、问题背景2、问题分析3、深入研究4、umask4.1、umask的工作原理4.2、umask的计算方式4.3、示例4.4、如何设置umask4.5、注意事项 1、问题背景 我们的java服务是打成war包放在tomcat容器里运行的,有一天我像往常一样去查看服务的日志文件,却提…...

Golang | Leetcode Golang题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; func findContentChildren(g []int, s []int) (ans int) {sort.Ints(g)sort.Ints(s)m, n : len(g), len(s)for i, j : 0, 0; i < m && j < n; i {for j < n && g[i] > s[j] {j}if j < n {ansj}}return }...

vscode+stfp插件,实现远程自动同步文件代码

概述 远程同步代码&#xff0c;将本地代码实时保存到同一局域网内的另一台电脑&#xff08;linux系统&#xff09;&#xff0c;这里的本地代码也可以是远程服务上的代码&#xff0c;即从一个远程ip同步到另一台远程ip服务器。 工具 vscode&#xff0c;SFTP插件 安装 vscod…...

python 实现djb2哈希算法

djb2哈希算法介绍 DJB2哈希算法是一种简单且快速的哈希算法&#xff0c;由Daniel J. Bernstein设计。这种算法的实现非常简单&#xff0c;适用于短键值的哈希表&#xff0c;也常被用于嵌入式设备和资源受限的系统。 基本原理 DJB2算法的原理是将输入的字符串视为一个字节数组…...

文件夹作为普通文件而非子模块管理

relaxed_ik_ros2 文件夹下存在 .gitmodules 文件和 .gitignore 文件。这说明该目录已经被 Git 识别为子模块。 要将这个文件夹作为普通文件而非子模块管理&#xff0c;你可以按以下步骤操作&#xff1a; 1. 删除子模块配置 首先删除 .gitmodules 文件中的子模块配置。你可以…...

7c结构体

文章目录 一、结构体的设计二、结构体变量的初始化2.1结构体在内存表示&#xff1b;**2.2**结构体类型声明和 结构体变量的定义和初始化只声明结构体类型声明类型的同时定义变量p1用已有结构体类型定义结构体变量p2*定义变量的同时赋初值。*匿名声明结构体类型 2.3 结构体嵌套及…...

浅聊前后端分离开发和前后端不分离开发模式

1.先聊聊Web开发的开发框架Spring MVC 首先要知道&#xff0c;Spring MVC是Web开发领域的一个知名框架&#xff0c;可以开发基于请求-响应模式的Web应用。而Web开发的本质是遵循HTTP&#xff08;Hyper Text Transfer Protocol: 超文本传输协议&#xff09;协议【发请求&#xf…...

RabbitMQ篇(死信交换机)

目录 一、简介 二、TTL过期时间 三、应用场景 一、简介 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09; 消费者使用basic.reject或者basic.nack声明消费失败&#xff0c;并且消息的requeue参数设置为false消息是一个过…...

HBase 的 MemStore 详解

一、MemStore 概述 MemStore 是 HBase 的内存存储区域&#xff0c;它是一个负责缓存数据写入操作的组件。每当有写操作&#xff08;如 Put 或 Delete&#xff09;发生时&#xff0c;数据会首先被写入到 MemStore 中&#xff0c;而不是直接写入磁盘。MemStore 类似于数据库中的缓…...

【嵌入式软件-数据结构与算法】01-数据结构

摘录于老师的教学课程~~(*๓╰╯๓)~~内含链表、队列、栈、循环队列等详细介绍~~ 基础知识系列 有空再继续更~~~ 目录 【链表】 一、单链表 1、存储结构&#xff1a;带头结点的单链表 2、单链表结点类型的定义 3、创建单链表 1&#xff09;头插法 2&#xff09;尾插法 …...

Windows应用开发-解析AVI视频文件

本Windows应用解析AVI视频文件&#xff0c;以表格的方式显示AVI文件结构。并可以将结果保存到bmp图片。下面是&#xff0c;使用该应用解析一部AVI电影获得的图片。 应用开发信息 定义一个INFO结构&#xff0c;包含两个字符串对象&#xff0c;一个ULONGLONG变量&#xff0c;和…...

探索TCP协议的奥秘:Python中的网络通信

引言 在网络通信的世界里&#xff0c;TCP协议&#xff08;传输控制协议&#xff09;就如同一座桥梁&#xff0c;连接着数据的发送方和接收方。作为一名拥有20年实战经验的编码专家&#xff0c;我深知TCP协议在构建稳定、可靠的网络应用中的重要性。今天&#xff0c;我将带领大…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...