当前位置: 首页 > 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…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...