Mysql碎片整理:一些注意事项整理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 整理Mysql的一些注意事项整理,不断汇总,可以通过二级标题去筛选,每个二级标题都是独立的。可以在评论区评论留下注意事项,我汇总,积少成多。

SQL语句的顺序

SELECT
[DISTINCT]
查询列表
[FROM 表名]
[WHERE 布尔表达式]
[GROUP BY 分组列表 ]
[HAVING 分组过滤条件]
[ORDER BY 排序列表]
[LIMIT 开始行, 限制条数]

AND 优先级比 OR 高

SQL 语句:

SELECT * FROM score WHERE score > 90 OR score < 50 AND subject = '计算机网络';

该语句的判断条件在SQL中解析如下:

  1. score < 50 AND subject = '计算机网络'
  2. scire > 90

傻眼了,原本你以为的是score > 90 OR score < 50 AND subject = '计算机网络',结果变成上面那样了。

原因:AND操作符的 优先级高于OR操作符

所以你应该用括号括起来:

SELECT * FROM score WHERE (score > 90 OR score < 50) AND subject = '计算机网络';

WHERE语句中不能用聚集函数 & 子查询中对同个表的子查询

聚集函数是对列进行计算的,它是对当前结果集中全列的结果进行计算,结果集的全列需要是固定的。而WHERE是根据条件对所有行进行筛选,是处于一个正在筛选的过程中。

子查询对同个表进行子查询

例如:我想查询一下课程名为计算机网络,并且该该课程平均分大于90的学号。

SELECT num_id FROM student_score WHERE subject = '计算机网络' 
AND 
score > (SELECT AVG(score) FROM student_score WHERE subject = '计算机网络');

内、外连接

  • 内连接:

对于内连接的两个表,参照表中的记录在被参照表中找不到匹配的记录,该记录不会加入到最后的结果集。

引自小册: MySQL 是怎样使用的:从零蛋开始学习 MySQL

例如:下面这个表是学生信息表,是完整的,但是下面的20180105在另外一张成绩表中是没有的,做内连接后,最后的结果集中是没有该学生字段的信息。

+----------+--------+------+--------------------+------------+------------------+-----------------+
| number   | name   | sex  | id_number          | department | major            | enrollment_time |
+----------+--------+------+--------------------+------------+------------------+-----------------+
| 20180101 | 杜子腾 | 男   | 158177199901044792 | 计算机学院 | 计算机科学与工程 | 2018-09-01      |
| 20180102 | 杜琦燕 | 女   | 151008199801178529 | 计算机学院 | 计算机科学与工程 | 2018-09-01      |
| 20180103 | 范统   | 男   | 17156319980116959X | 计算机学院 | 软件工程         | 2018-09-01      |
| 20180104 | 史珍香 | 女   | 141992199701078600 | 计算机学院 | 软件工程         | 2018-09-01      |
| 20180105 | 范剑   | 男   | 181048199308156368 | 航天学院   | 飞行器设计       | 2018-09-01      |
| 20180106 | 朱逸群 | 男   | 197995199501078445 | 航天学院   | 电子信息         | 2018-09-01      |
+----------+--------+------+--------------------+------------+------------------+-----------------+
  • 外连接:

对于外连接的两个表,参照表中的记录即使在被参照表中没有匹配的记录,也仍然需要加入到结果集。缺失的内容以NULL填充。

【忽略】批量语句时,对有主键或唯一限制的规则,保证正确的内容插入,重复的内容忽略

使用INSERT IGNORE语句。例如表info中有字段a不允许插入重复的值,现在表中字段a已经有111

现在有这样以一个语句

INSERT IGNORE INTO info (a, b) VALUES(111, '哈哈'), (222, '哈哈哈');

则最终结果是(222, '哈哈哈')插入成功。(111, '哈哈')被忽略。

【更新】批量语句时,对有主键或唯一限制的规则,保证正确的内容插入,重复的内容更新

ON DUPLICATE KEY UPDATE 字段名 = 更新值

INSERT INTO info (a, b) VALUES(111, '嘻嘻') ON DUPLICATE KEY UPDATE b = '嘻嘻';

触发器的注意事项

  1. 触发器中不要用SELECT返回结果集。
  2. NEW代表记录的列的值可以被更改,OLD代表记录的列的值无法更改。可以SET NEW.列名 = ...
  3. 某个操作语句有问题了,AFTER触发器无效。
  4. 触发器也是SQL操作的一部分,发生了错误会让整个语句回滚。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
监控 关系型数据库 MySQL
MySQL创建索引的注意事项
在数据库设计和优化中,索引的合理使用是提高查询性能和加速数据检索的关键因素之一。通过选择适当的列、了解数据分布、定期维护和监控索引性能,我们能够最大程度地发挥索引的优势,提高数据库的效率和响应速度。
161 0
|
7月前
|
监控 关系型数据库 MySQL
MySQL创建索引的注意事项
在索引的世界中,权衡是关键。权衡读写性能,权衡索引的数量和类型,权衡查询的频率和数据分布。通过谨慎的设计、定期的维护和持续的监控,我们能够确保索引在数据库中的角色得到最大的发挥,为应用提供更加高效和可靠的数据访问服务。在数据库优化的旅途中,索引是我们的得力助手,正确使用它将使数据库系统更具竞争力和可维护性。
49 0
|
存储 关系型数据库 MySQL
数据库系列课程(12)-MySQL数据库优化及注意事项
数据库系列课程(12)-MySQL数据库优化及注意事项
73 0
|
存储 关系型数据库 MySQL
6.2.3 【MySQL】InnoDB的B+树索引的注意事项
6.2.3 【MySQL】InnoDB的B+树索引的注意事项
84 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库碎片化:隐患与解决策略
UUID作为主键可能导致MySQL存储碎片,影响性能。频繁的DML操作、字段长度变化和非顺序插入(如UUID)都会造成碎片。碎片增加磁盘I/O,降低查询效率,浪费空间,影响备份速度。建议使用自增ID,固定长度字段,并适时运行OPTIMIZE TABLE来减少碎片。
|
2月前
|
SQL 存储 关系型数据库
MySQL 回收表碎片实践教程
在 MySQL 数据库中,随着数据的增删改操作,表空间可能会出现碎片化,这不仅会占用额外的存储空间,还可能降低表的扫描效率,特别是一些大表,在进行数据清理后会产生大量的碎片。本篇文章我们一起来学习下如何进行碎片回收以及相关注意点。
86 1
MySQL 回收表碎片实践教程
|
2月前
|
存储 关系型数据库 MySQL
MySQL 字符字段长度设置详解:语法、注意事项和示例
MySQL 字符字段长度设置详解:语法、注意事项和示例
276 0
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
|
5月前
|
关系型数据库 MySQL Java
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开
软件开发2003 -Can·t to MySQL server on ‘xxxxxx‘(10038),宝塔初始化安装mysql,远程链接MySql注意事项,开始时服务器是没有放开端口的,宝塔也都开
|
5月前
|
存储 关系型数据库 MySQL
MySQL删除索引的方法与注意事项
MySQL删除索引的方法与注意事项