news 2026/10/9 7:56:23

MySQL操作相关知识点个人总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL操作相关知识点个人总结

一、数据库创建相关

1.编码集

创建数据库的时候,有两个编码集:

  • 数据库编码集,数据库未来存储数据的编码格式
  • 数据库校验集,数据库进行字段比较使用的编码

采用什么编码集决定存取数据时采用什么编码,操作和编码必须是一致的,比如通过大写'A'还是小写'a'进行查找,不同编码集有不同的效果。

编码集确定后,此后创建的表会默认继承数据库的编码规则。

2.备份数据库

备份的本质是把数据库上所有做过的操作都记录下来,所以要恢复备份的数据库,本质是将这些记录的操作再跑一遍。


二、表的创建相关

  • 可使用不同存储引擎创建表
  • 修改某一列的属性,不是定向修改,而是直接覆盖。
  • 不要轻易删除表或修改表结构,因为数据库是程序员负责维护的最靠近底层的模块,一旦修改,所有上层相关操作都可能会出问题。

三、数据类型

约束用于保证插入的数据一定是合法的,这样程序员才能放心使用。数据类型本身是一种约束,比如插入数据超过其类型的界限,mysql会直接拦截(这和语言不一样,语言是运行时才会报错)。

1为什么有这么多类型

其实和语言一样,类型不同占用的空间也不同,根据场景选择合适的类型从而减少空间的浪费。

2.类型选讲

(1)char类型

MYSQL的一个字符和C不同,不是一个字节。一个汉字底层虽然占多字节,在MYSQL中也叫一个字符,utf中一个字符占用三个字节,所以建表时char(2)可以塞两个英文字母,也可以塞两个汉字

(2)enum和set

虽然看起来存储的是选项,但实际上存储的是代码,既可以插入数字也可以插入选项文本。不过集合采用位图存储,所以输入的数字会换算成对应的集合,如1011代表第1、2、4个选项被选中。


四、表的其它约束

前面提到数据类型本身是一种约束,它保证的是字段的正确性,但还需要有额外的约束从业务逻辑角度保证数据的正确性,如两个人不可能拥有同样的身份证号码。下面挑选一些约束进行介绍:

1.空属性、not null与default

在MYSQL中,NULL代表没有值,空代表内容为空。

如果通过default设置了默认值,同时设置为not null,插入时不填写值没有问题。如果没设置默认值而设置了not null就会报错,至少要插入一个空值。

2.自增长

如果用别的值来截断,他会就着新值进行自增。此外可以设定自增的起始值,一个表最多一个自增长。

3.主键

主键让数据具有唯一性。

可以建完表后再添加或删除主键,添加时数据本身不能有重复,否则无法添加。

4.复合主键

如果多列数据绑在一起设定主键,这些数据就叫复合主键,比如一个学生和一门课程形成一对信息任何表只会有一个主键(因为多个主键必然形成复合主键)

5.唯一键

唯一键同样起到使某列具有唯一性的作用。但主键不能为空,而唯一键可以为空。主键和唯一键互相补充,通常只有特定标识作为主键和复合键,比如学号,而唯一键用来标识具有业务含义的数据,如成绩等等。

6.外键存在的意义

首先逻辑上有关联的数据不一定会放在一个表里,比如班级分类(文科班、理科班),以及学生表(班级、姓名...),但假如逻辑上两张有关联的表具有约束关系,就需要用外键。比如学生表中某一位学生不应该归属于不存在的班级。此时班级表作为主表,学生表作为从表。


五、表的查询

1.插入

  • value后不写要插入哪些列默认是全列插入,需要填写所有不允许为空的列。
  • 在value后圆括号后带逗号,可以继续插入更多的行
  • 插入和键冲突时可以选择直接替换,也就是用replace直接插入

2.筛选

这里重点讲一下查询语句的顺序,mysql不是按照书写顺序执行的,而是按下面的顺序:

  1. FROM:首先确定从哪张表获取数据。
  2. WHERE:对表中的原始行进行过滤。此时,数据库还在看原始数据,它只知道这些原始列,根本还不知道你后来打算给表达式结果或列本身叫别名。
  3. GROUP BY:如果有分组,在这一步进行。
  4. HAVING:对分组后的数据进行过滤(这里可以使用聚合函数)。
  5. SELECT:select本质指定最终结果显示哪些列或表达式,实际上表的内容到此已经全部出来了。
  6. ORDER BY:排序是在select显示出来后进行的。
  7. LIMIT:限制返回行数,在排序后进行。

需要注意的是:运算后要用select显示时列名可以用as替换,但where不能这个别名,因为where比select靠前。而having虽然实际比select要后,但MySQL对其进行了扩展使得having可以使用别名,在实际执行时会自动换回与原名。

如果HAVING在SELECT之后,数据库必须先计算出所有结果、起好别名,然后再去过滤掉不符合条件的行。这在性能上是极大的浪费——既然这组数据最后都要被扔掉,为什么还要费劲给它计算别名并展示出来呢?

3.删除表

使用delete清除表后,自动计数不会归0,而使用truncate就可以归零计数(这个命令也不走事物即不被记录到日志里,是危险的)

4.删除重复数据的实际操作

创建新表,插入数据后覆盖原表,以免数据删错或导致文件系统inode分布不均匀。

5.对聚合以及表的理解

分组和聚合是两个概念,先将数据分好组,然后再用聚合函数将每个组形式上变为一行统计后的数据。而这些中间过程形成的都是表,所以形式上MYSQL操作中一切皆表。


六、复合查询

复合查询看似复杂,只要牢记子查询、笛卡尔积的结果都只是一张新表,主查询只是对这张新表做查询就会很明了(当然还是得靠多练习)

from后面跟两张表,它们就会做笛卡尔积,也就是组合得到一张新表,笛卡尔积后要做无效信息过滤,此外多表联合时相同名称的列应取别名。

如果两张表是同一张表,就叫自连接,自连接前两张表分别要起别名。

子句返回的虽然是表,但如果是一行一列就可以直接在where语句中和列属性做相等判断

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 7:54:40

UE5网络同步与Coop实战:服务器权威、属性复制与RPC全解析

最近在搞一个UE5的多人Coop项目,从单人原型转到联机协作玩法时,我踩了不少网络同步的坑。很多本地跑得好好的逻辑,一开双客户端就乱套:门开了所有人看到、敌人的血量在两端不一致、拾取物刷了两份。这些问题的根子不是代码写得差&…

作者头像 李华
网站建设 2026/10/9 7:54:14

黑白纸片题解:从二维矩阵到单调栈,最大全黑矩形面积详解

1. 题目原题:黑白纸片到底求什么1.1 回忆版题目描述3月15号上午顺丰春招笔试,第二题叫《黑白纸片》,刷了一圈讨论区,考生普遍反馈:题面很好懂,真正写起来才发现建模才是关键。我先把回忆版的题面整理如下&a…

作者头像 李华
网站建设 2026/10/9 7:53:37

接口测试流程的三个核心环节

一 接口参数化接口参数化允许你用不同的数据多次运行同一个请求,从而实现数据驱动测试。1、使用变量(环境/全局变量)这是最基础的方式,将请求中易变的部分(如URL、参数)替换为变量占位符。定义变量&#xf…

作者头像 李华
网站建设 2026/10/9 7:52:45

长时间 AI 任务怎么让用户放心?队列、进度、取消与状态反馈

用户上传一个视频、文档或一批图片后,最容易焦虑的不是等待本身,而是等待期间系统只显示一个转圈图标。页面刷新后看不到任务,进度停在 99%,点击取消没有反应,失败后又只剩“处理异常”。这些体验问题背后通常是同一个…

作者头像 李华