当前位置: 首页 > 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;我将带领大…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)

崩溃、内存飙升、后台任务未释放、页面卡顿、日志丢失——稳定性问题&#xff0c;不一定会立刻崩&#xff0c;但一旦积累&#xff0c;就是“上线后救不回来的代价”。 稳定性保障不是某个工具的功能&#xff0c;而是一套贯穿开发、测试、上线全流程的“观测分析防范”机制。 …...

信息系统分析与设计复习

2024试卷 单选题&#xff08;20&#xff09; 1、在一个聊天系统(类似ChatGPT)中&#xff0c;属于控制类的是&#xff08;&#xff09;。 A. 话语者类 B.聊天文字输入界面类 C. 聊天主题辨别类 D. 聊天历史类 ​解析 B-C-E备选架构中分析类分为边界类、控制类和实体类。 边界…...