讲解
MySQL 是世界上最流行的开源关系型数据库,1995 年由瑞典 MySQL AB 公司发布第一个版本,后来几经易手(Sun、Oracle),并衍生出 MariaDB 等分支。它支撑了互联网史上大量的经典架构——从早年的 LAMP(Linux、Apache、MySQL、PHP)到今天各种微服务背后的订单库、用户库。目前的主流版本是 MySQL 8.0,相比老旧的 5.7 带来了窗口函数、CTE、真正的数据字典、更好的 JSON 支持和默认的 utf8mb4 字符集。本教程所有示例都在 MySQL 8.0 上验证通过。
学习本教程之前,需要先分清两个概念:SQL 是语言,MySQL 是实现了这种语言(并有自己方言和扩展)的数据库软件。本站已有一部 SQL 教程,讲 SELECT、JOIN、聚合这些语言本身的知识;而本教程讲的是 MySQL 这个软件——怎么安装部署、怎么设计表和索引、怎么管理用户权限、怎么备份恢复、怎么排查性能问题。可以粗略理解为:SQL 教程教你「开车」,本教程教你「懂车」。
本教程假设你已经会写基本的 SELECT、INSERT、UPDATE、DELETE,所以不会再花篇幅教查询语法,示例里的查询都一眼能看懂。动手环境方面,推荐用 Docker 跑一个 MySQL 8.0 容器(下一章就讲),每条示例都亲自执行一遍。数据库管理是肌肉记忆型的技能,看懂和会做之间隔着一百次亲手敲命令。
示例
连上 MySQL 之后,先确认服务器版本和当前时间——VERSION() 返回的是服务器的版本,不是客户端的:
SELECT VERSION() AS mysql_version, NOW() AS server_time;
再看看服务器的两个关键默认设置:默认字符集(8.0 起为 utf8mb4)和默认存储引擎(InnoDB),后面都有专门的章节展开:
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'default_storage_engine';
常见坑
- 把 MySQL 和 SQL 混为一谈:SQL 是标准语言,MySQL、PostgreSQL、SQLite 是各自实现,方言细节互不相同。说「我这条 SQL 在 MySQL 里报错」之前,先想清楚是语言问题还是方言问题。
- 拿 5.7 的老经验套 8.0:8.0 默认认证插件换成 caching_sha2_password、GRANT 不再能隐式建用户、utf8mb4 成为默认。网上搜到的老教程写法在新版本上经常报错,注意甄别。
- 把 MariaDB 当成 MySQL:两者早已分叉,语法和特性差异越来越大。本教程的内容以官方 MySQL 8.0 为准。
- 只看不练:装一个容器只要五分钟,跟着教程把每条命令跑一遍,才是真正的学习路径。
小结
MySQL 是最流行的开源关系型数据库,本教程聚焦它的安装、管理与设计,与 SQL 语言教程分工互补;学习前请确认你已掌握基础查询。下一章用 Docker 把 MySQL 8.0 跑起来。