已经有很多教程面面俱到、事无巨细,但实际上能用到的、消化的内容很少。
希望本文能帮助MySQL初中级使用者,解决问题的同时,提供更好的学习与实践方法,从原理角度理解为何要这么用、为何MySQL要这样设计。
本文聚焦于常见的使用场景,给出MySQL用法和基本原理说明。
- 为便于实践和消化,同时提供了很多案例和脚本。
- 为了读者进一步深入学习、掌握自我升级的方法,提供了一些权威文档的参考。
如何学习MySQL
善用权威文档和资料,并动手实践验证。因此本文中提到的内容,基本上都有对应的脚本和例子,供大家
- 《MySQL学习方法:官方文档的使用》:快速、准确掌握MySQL原理的途径
基本使用与基础原理
主要介绍MySQL常见的基本使用,但包含了对应的原理分析,因此不同于一般的使用文档。
DDL及数据类型
除了使用,还解答了下面的一些问题
- 常用的有哪些类型,有什么区别?
- 类型后的长度有几种含义?
- 存储开销和长度一定有关吗?
- 自增什么情况下会重复?
《MySQL数据类型详解》:
涉及字段长度、取值范围、存储开销等。
包括了5.6/5.7/8.x的主要类型,区分了显示宽度/有无符号/定点浮点、不同时间类型
下面是部分分解专题:
- 《MySQL中VARCHAR最大长度是多少?CHAR和VARCHAR有哪些区别?》
- 《MySQL显示宽度与字段长度》
- 《时区是怎么划分的?世界各时区的时间如何统一表达?GMT、UTC、UNIX有什么区别?》
自增、自动更新等类型修饰
- 《MySQL自增列AUTO_INCREMENT详解》:介绍自增列用法,含NULL值、初始值、指定值等详细说明
- 《MySQL自动更新列时间戳 ON UPDATE CURRENT_TIMESTAMP》:
ON UPDATE
的生效时机、适用类型、精度与默认值等。
表定义
- 《MySQL分区partition》:介绍了分区的使用,以及为什么要做数据库拆分、为什么partition可以提升性能
DML与基础函数/命令
- 时间处理函数复杂,应该选用哪个? 它们之间有哪些差异和共性?
- NULL作为特殊值,尝尝有出人意料的表现,有什么规律?
- 《MySQL日期与时间函数》:涉及日期/时间格式化、增减、对比、时区、UTC和UNIX时间
- 《MySQL计算字段长度/大小》:涉及length、bit_length、char_length函数对比
- 《MySQL分页查询》:limit用法详解、适用的性能优化场景
- 《NULL如何参与运算和统计》:涉及到计数求和聚合count/max/sum/group等函数下
NULL
的表现
应用场景
- 性能问题该如何排查、分析、处理?
- 如何顺畅使用MySQL客户端、维护MySQL服务器?
- 复杂的数据分析,有函数该如何用,没函数该如何自己模拟?
性能分析与监控
- 《MySQL性能分析之show processlist及information_schema.processlist详解》
- 《MySQL基于information_schema的性能分析样例》:涉及连接数、数据量、事务和锁等的监控,慢连接处理
- 《MySQL processlist的state属性详解》:常用于慢连接的障碍定位。
- 《MySQL使用Kill命令》:主要用于杀死/清理慢连接
数据分析
- 《MySQL统计数据的时间分布》
核心为通过SUBSTRING、DATA_FORMAT、EXTRACT等函数对时间字段进行处理。 - 《MySQL实现排名/分组排名/合计》:介绍了8.0窗口函数rank/dense_rank,也提供了5.6/5.7自行模拟的思路
- 《一对多连表时实现多行过滤》
客户端与服务器
常见问题及解决方案
经典和常见问题索引,提供解决方案。
- 《MySQL常见误区》
- 《InnoDB数据损坏如何恢复》:常见于机房断电后,MySQL启动失败的情况
- MySQL ERROR 16 (42000):FUNCTION sum does not exist. Check the ‘Function Name Parsing and Resolution’
- Data truncation: Out of range value for column
- 《MySQL变量使用的常见问题》
以上。感谢你的关注。
待更新:
- 索引结构与设计,执行计划优化
- 事务、锁
- 磁盘存储结构、行模式
- 聚合与排序原理、函数使用