MySQL 是一款开源、跨平台、关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,现归属 Oracle 公司。
MySQL 使用最通用的 SQL(结构化查询语言)管理数据,是 Web 开发、中小型项目最主流的数据库。
如果你打算从事软件开发、数据分析或者系统运维相关工作,MySQL 几乎是一门必修课。它是目前最流行的开源关系型数据库管理系统,在全球网站技术栈中占据着举足轻重的地位。
说起关系型数据库,你可能会想到 Oracle、SQL Server 或者 PostgreSQL。Oracle 功能强大但价格昂贵,SQL Server 主要面向 Windows 生态,而 MySQL 的优势在于开源免费、性能优秀、社区活跃,而且被各种编程语言广泛支持。无论是 Java、PHP、Python 还是 Node.js,都能找到成熟的 MySQL 连接库。
2008年 MySQL 被 Sun 公司收购,随后 Sun 又被 Oracle 收购。这让很多人担心 MySQL 的未来,但事实证明 Oracle 一直在持续投入 MySQL 的研发,特别是 MySQL 8.0 版本的发布,带来了很多令人期待的新特性。
在学习MySQL之前,我们需要先理解几个核心概念,如下图:

上图中,表示的是一个单机版本的 MySQL 服务器,下面将根据上图介绍一些数据库概念,方便理解:
数据库(Database) 是按照数据结构来组织、存储和管理数据的仓库。你可以把它想象成一个Excel 文件,里面可以包含多张工作表。注意,一个 MySQL Server 可以包含多个数据库,如上图所示。
表(Table) 是数据库中存储数据的基本单位,类似于 Excel 中的工作表。就像上图中,“数据库N”中存在三张数据表,看上去和 Excel 的工作表是不是非常类似。每张表由行和列组成:
行(Row):也称为记录,表示一条完整的数据。比如一个用户的全部信息
列(Column):也称为字段,表示数据的某个属性。比如用户的姓名(NAME)、年龄(AGE)、性别(SEX)
关系(Relationship) 是关系型数据库的精髓。通过在表与表之间建立关联,我们可以避免数据冗余,同时保持数据的一致性。举个例子,在一个电商系统中,订单表只存储用户ID,而不存储用户的全部信息,用户信息单独存放在用户表中。当用户修改地址时,所有相关订单显示的信息都会自动更新。上图中,没有将地址信息直接放到用户信息中,而是单独使用一张表进行存储,然后使用一张中间表建立用户和地址表的关系,如用户“张三”拥有两个地址分别为“成都市高新区”和“成都市武侯区”,记录如下:

SQL(Structured Query Language) 是操作关系型数据库的标准语言。不论是 MySQL、Oracle 还是 PostgreSQL,虽然各自有一些方言差异,但核心的 SQL 语法是通用的。更多关于 SQL 语句的知识,可以阅读 SQL 教程。
目前 MySQL 主要有两个活跃的版本分支:
MySQL 5.7:发布于 2015 年,是一个非常成熟的版本。如果你的项目对稳定性要求极高,或者使用的是较老的应用框架,5.7是个稳妥的选择。官方对 5.7 的支持会持续到 2023 年 10 月。
MySQL 8.0:2018 年正式发布,是目前的主力版本。相比 5.7,8.0 带来了诸多改进:
性能提升:官方宣称比5.7快2倍
窗口函数:终于支持了标准SQL的窗口函数
公用表表达式(CTE):让复杂查询更易读写
JSON增强:原生的JSON数据类型和丰富的操作函数
默认字符集改为utf8mb4,更好地支持emoji
本教程主要以 MySQL 8.0 为例进行讲解,同时也会标注 5.7 版本的差异之处。