MySQL

关系型数据库管理系统

MySQL 是一款由瑞典MySQL AB公司开发, Oracle数据库 旗下的开源的关系型数据库管理系统,广泛地应用于Internet上的中小型网站开发,是最流行的数据库管理系统之一。

1979年,MySQL最初是由一个名叫蒙蒂·维德纽斯(Monty Widenius)设计的一款底层面向报表的 存储引擎 工具——Unireg。1996年,MySQL1.0版本发布,1999-2000年,MySQL AB公司在 瑞典 成立。2005年10月,里程碑版本5.0发布,它使 MySQL 具备了企业级数据库管理系统的特性。2008年1月16号,MySQL被 太阳微系统 收购,进入Sun MySQL时代。2009年4月20日, 甲骨文公司 ( Oracle数据库 )收购 太阳微系统 ,进入Oracle MySQL时代。 2010年12月,MySQL5.5版本发布,该版本加强了MySQL各个方面企业级的特性。2015年,MySQL 5.7 GA重磅发布,新特性包括160万只读QPS等。 2016年9月, MySQL 第一个开发里程碑8.0.0版本发布。 2023年10月, MySQL 发布了8.2.0版本,这是最受欢迎的开源数据库的第二个创新版本。 同年7月,MySQL版本更迭为9.0.0,主要增加了 ECMAScript 存储程序、VECTOR 类型支持、内联和隐式外键约束等功能。 2025年1月21日,MySQL 9.2.0版本发布。

MySQL采用的是 SQL (SQL),这是一种被广泛应用于访问数据库的常用标准化语言。 MySQL由于其体积小、速度快、总体成本低、 开放源代码 、提供多种存储器引擎、支持大型数据等特点已成为多数中小型网站选择的网站数据库。 2009年, 美国 的科技网站《Inforworld》评出了10大最具价值开源软件, MySQL 在其中排名第6。 2019年,MySQL在全球知名的数据库流行度排行榜网站DB-Engines的351 个受监测数据库管理系统中排名第一,获得DB-Engines2019“年度 DBMS”称号。

名称由来

MySQL 基本目录及大量库和工具均采用了前缀“my”,这是 瑞典 程序员Michael Widenius的女儿的名字,他是MySQL的共同创始人,在开发中起到了关键作用。

MySQL 的徽标是一只 海豚 ,名字叫“Sakila”,是由MySQL AB的创始人从用户在“海豚命名”的竞赛提供的大量名字列表中筛选出来的,该名字由来自非洲埃斯瓦蒂尼(Eswatini,前 斯威士兰 )的开源软件开发者Ambrose Twebaze提供,它来源于名叫SiSwati的斯威士兰方言,也是Ambrose家乡 乌干达 附近桑塔尼亚Arusha地区一个小镇的名字。

发展历程

1979年, MySQL 最初是由一个名叫蒙蒂·维德纽斯(Monty Widenius)的小职员为一个叫TcX的公司设计的一款底层面向报表的 存储引擎 工具——Unireg。在1985年,Monty Widenius和几个志同道合的朋友在 瑞典 成立了一家公司,也就是MySQL AB的前身。他们自己设计了一个索引顺序存取数据算法,开发了高查询性能的数据引擎,也就是ISAM(Indexed Sequential Access Method)存储引擎核心算法的前身。利用ISAM结合 mSQL (一种数据库系统)实现他们的应用需求。

1996年,MySQL1.0版本发布,此时该版本只在小范围使用。10月,跳过2.x版本,3.11.1发布,一个月后 Linux 版本出现。此时 MySQL 只能在一个表上做一些Insert(插入)、Update(更新)、Delete(删除)和Select(选择)操作。

1999至2000年,MySQL AB公司在 瑞典 成立,与Sleepycat合作开发了Berkeley DB引擎,从此开始支持事务处理。2000年4月,MySQL对旧储存引擎进行整理,命名为My-lSAM。2001年,在Heikki Tuuri的建议下,集成了 myisam 和 InnoDB 储存引擎正式结合InnoDB引擎的4.0版本发布。此时MySQL已经支持大多数的SQL操作。2004年10月,经典的4.1版本发布,引入了更多新的语法,新增加了子查询。2005年10月,里程碑版本5.0发布,加入了游标、储存过程、 触发器 、视图和事务支持。

2008年1月16号,MySQL被 Sun公司 收购,进入Sun MySQL时代。2009年4月20日, 甲骨文公司 ( Oracle数据库 )收购 太阳微系统 ,进入Oracle MySQL时代。2010年12月,MySQL5.5版本发布, InnoDB 成为默认储存引擎。 MySQL 5.5加强了MySQL各个方面企业级的特性。2011年4月,MySQL 5.6版本发布,由于对源代码的调整,2013年才正式发布。2013年4月,MySQL 5.7版本发布,并在并行控制、并行复制等方面进行了大量的优化调整。2015年,MySQL 5.7 GA重磅发布,新特性包括160万只读QPS等。

2016年9月, MySQL 第一个开发里程碑8.0.0版本发布。MySQL8 带来了全新的体验,比如支持NoSQL、JSON等,拥有比MySQL 5.7两倍以上的性能提升。 2017-2023年,MySQL不断更新,发布了8.0系列版本。2023年10月, MySQL 发布了8.2.0版本,这是最受欢迎的开源数据库的第二个创新版本。对于InnoDB数据库、 克隆 、服务器编译等进行了优化。2024年1月, MySQL 发布了8.3.0版。 同年7月,MySQL版本更迭为9.0.0,主要增加了 ECMAScript 存储程序、VECTOR 类型支持、内联和隐式外键约束等功能。 2025年1月21日,MySQL 9.2.0版本发布。

历史版本

备注:仅收录部分关键或者主要版本

环境和配置

MySQL数据库服务器的最低要求包括操作系统、处理器、内存、存储空间、网络要求和安全性要求。

功能和服务

产品功能

数据索引: MySQL 的数据索引功能可以帮助用户快速定位和检索数据库中的数据。通过在表中创建索引,可以提高数据库查询的速度和效率。 MySQL 支持多种类型的索引,包括主键索引、唯一索引、普通索引和全文索引等。主键索引是唯一标识一条记录的索引,唯一索引保证索引值的唯一性。索引的常见操作主要包括创建索引和删除索引等。

操作数据库: MySQL数据库操作可以分为创建、选择、查看和删除4类。用户可以使用CREATE语句及insert into等其它子语句创建数据库、用use命令于选择一个数据库,可以使用show databases命令查看MySQL数据库中所有已经存在的数据库和使用drop database命令删除数据库。

操作数据表: 数据库创建完成后,即可在命令提示符下对数据库进行操作,如创建数据表、更改数据表结构以及删除数据表等。用户可以使用create table命令创建数据表,使用show columns命令或describe命令查看指定数据表的表结构。采用alter table命令修改表结构。

数据查询 :查询数据是指从数据库中获取需要的数据,用户可以根据自己对数据的需求来查询不同的数据。在 MySQL 中,对数据库的查询使用SELECT语句,其功能非常强大,使用较为灵活。

存储过程: 存储过程是一种在数据库中存储复杂程序,以便外部程序调用的数据库对象。存储过程包含完成特定功能的 SQL 集,经编译创建并保存在数据库中。用户可指定存储过程的名字并给定相应参数来调用执行。用户可以创建存储过程以及使用存储过程。

函数 :MySQL函数是MySQL数据库提供的内置函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、 系统信息 函数、加密函数、格式化函数等。函数的执行速度非常快,可以提高 MySQL 的处理速度,简化用户的操作。

视图: 数据库中的视图,它是从一个或几个基本表(或视图)通过某种定义规则组织起来的虚拟表。使用视图,可以定制用户数据,聚焦特定的数据。用户可以创建视图以及修改和删除视图。

MySQL备份与恢复: 数据备份是保证数据安全的最后一道屏障。备份使数据库的失效次数减到最少,从而使数据库保持最大的可用性。用户可以使用 mysqldump 与BingLog两种方式对MySQL数据库进行备份与恢复操作技术。

服务场景

MySQL 目前大多应用于互联网行业,如: 百度 、 腾讯控股 、淘宝、 京东集团 、网易、 新浪 、 谷歌 、Facebook、 Twitter 、 GitHub 等都在使用 MySQL。搜索、社交、 电子商务 、游戏的核心存储往往也是 MySQL。其常见的应用场景:

Web 网站系统: 由于MySQL数据库的安装配置简单,运营成本低,性能好, MySQL 是 开放源代码 的,完全可以免费使用,因此Web 网站开发者成为了 MySQL 的主要客户群。

日志记录系统: MySQL 数据库的插入和查询性能高效。比如处理用户的登录日志,操作日志等,都是常用的应用场景。

数据仓库系统: 通过 MySQL 的简单复制功能,可以将数据从一台主机复制到另外一台 ,在局域网、广域网内都可以复制,从而提升 计算机 的性能和数据 存储量 。 MySQL 免费并且使用成本低。

嵌入式系统 : MySQL在资源使用方面的伸缩性非常大,无论在资源充裕还是资源稀缺的环境都可正常运行。 而且 MySQL 有专门针对于嵌入式环境的版本。

产品特色

开放源代码 : 使用 C和 C++ 编写,并使用了多种编译器进行测试,保证了源代码的可移植性,同时为多种 编程语言 提供了 API。这些编程语言包括 C、C++、 Python 、Java、 Perl 、 PHP 、 Eiffel 、 Ruby ,.NET和 TCL科技 等,并且完全开放。同时,开源也带来免费,各个技术爱好者可以一起审核程序、优化问题,并且无需付费。

完全基于 多线程 核心 :支持多处理器,因此 MySQL 是一个真正的多用户、多线程SQL数据库服务器,支持大容量的用户和并发业务操作,是中小企业特别是 Linux 平台的首选自由数据库。

插件式存储引擎: MySQL 使用的是插件式存储引擎。它将mylsam、 InnoDB 、ndb、tokudb等引擎兼容并包,其中最广泛使用的是 myisam 和 InnoDB 两种 存储引擎 。MyISAM是MySQL最早的ISAM存储引擎的升级版本,也是MySQL默认的存储引擎。

多平台支持 :MySQL可以支持 C++ 、Java、 Perl 、 Python 、 PHP 等等,可以在 unix 、 Windows 、 Linux 等各种平台使用。

数据类型丰富 :除了常用类型外,MySQL还支持变长的BLOB类型,以及在其他数据库系统比较少见的枚举类型ENUM和SET。

应用程序接口简单 :MySQL基于客户/服务器结构,其客户库中提供了一个完整而又一致的语言包装器,可以方便地使用PHP、Java、Perl等语言连接到MySQL。

产品架构

逻辑架构

MySQL 逻辑架构整体分为三层:客户端层、服务器层和 存储引擎 层。

最上层为客户端层,主要负责应用连接处理、用户鉴权和安全管理等,这些主要功能均在这一层处理。比如连接处理、授权认证、安全等等。 最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。

第二层为服务器层。大多数 MySQL 的核心服务功能都在这一层,包括查询解析、分析、优化、 缓存 以及所有的内置函数(例如,日期、时间、数学和加密函数),所有 存储引擎 的功能都在这一层实现:存储过程、 触发器 、视图等。

第三层为 存储引擎 。存储引擎负责 MySQL 中数据 的存储和提取和 linux 下的各种文件系统,服务器通过API与存储引擎进行通信。

环境变量

MySQL中主要直接及间接使用的环境变量如下:

存储引擎

一般来说,MySQL有以下4种引擎: myisam 、HEAP、 InnoDB 和Berkley(BDB)。 MySQL 不同的版本所支持的引擎是有差异的。

MyISAM :MyISAM是 MySQL 的ISAM扩展格式和默认的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空MyISAMPack工具。 myisam 提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等。

MERGE :MERGE 存储引擎 是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其他引擎突出,但是在某些情况下非常有用。MERGE表就是几个相同MyISAM表的聚合器。

HEAP :HEAP允许只驻留在内存里的临时表格。HEAP表格在需要使用SELECT表达式来选择和操控数据的时候非常高效。

InnoDB 和Berkley DB(BDB): InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。InnoDB还引入了行级锁定和外键约束,在以下场合使用InnoDB是理想的选择。

Archive引擎: Archive 存储引擎 只支持INSERT和SELECT操作,在 MySQL 5.1之前不支持索引。Archive表适合日志和数据采集类应用。Archive引擎支持行级锁和专用的 缓存 区,所以可以实现高并发的插入,但它不是一个事物型的引擎,而是一个针对高速插入和压缩做了优化的简单引擎。

数据类型

在 MySQL数据库 中,每一条数据都有其数据类型。MySQL支持的数据类型主要分成3类:数字类型、字符串(字符)类型、日期和时间类型。

数字类型:

MySQL 支持所有的ANSI/ISO SQL 92数字类型,包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER和SMALLINT)、近似数字的数据类型(FLOAT、REAL和DOUBLE )。

字符串(字符)类型:

字符串类型可以分为3类:普通的文本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。它们之间都有一定的区别,取值的范围不同,应用的地方也不同。

日期和时间类型:

日期和时间类型包括DATETIME、DATE、TIMESTAMP、TIME和YEAR。每种类型都有其取值的范围,如赋予它一个不合法的值,将会被“0”代替。

支持的SQL语言

从 结构化查询语言 语句类型上讲, mSQL 支持的SQL语言主要是四种类型: 数据操纵语言 (DML)、数据定义语言( DDL )、数据查询语言( DQL )和数据控制语言(DCL)。不同语句被数据库引擎执行,其执行方式、复杂程度都不相同。其中最为复杂的是DQL查询语句。查询语句的执行。

1.数据定义语言( 数据 Definition Language,DDL):用户可以对数据库的结构描述定义,包括数据库的完整性、安全保密定义,如口令、级别、存取权限等。这些定义存储在数据字典中,是数据库管理系统的基本依据。数据定义语言涉及 Transact-SQL 语言中的 SQL CREATE TABLE 、 CREATEVIEW 、 CREATE INDEX 等语句。

2.数据操纵语言(Data Manipulation Language, DML)主要用于操纵数据库中的数据,包括INSERT、SELECT、UPDATE、DELETE等语句。INSERT用于插入数据;UPDATE用于修改数据;DELETE用于删除数据;SELECT则可以根据用户需要从数据库中查询一条或多条数据。

3.数据查询语言( 数据 Query Language,DQL):一般指数据检索语句。基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块,即“SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>”的格式, SQL Server 2008数据库对标准的数据查询语言进行了功能上的扩展。

4.数据控制语言(Data Control Language,DCL):用于安全管理,确定哪些用户可以查看或修改数据库中的数据。 数据控制语言用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。

管理工具

所获荣誉

参考资料

相关事件

甲骨文收购MySQL

2009年外媒评价“甲骨文收购MySQL”为IT市场9大失败事件之一,同时MySQL联合创始人大卫·艾克马克(David Axmark)也在2010年的采访中表示:“甲骨文没有真正的理由支持MySQL,尽管当前MySQL与甲骨文数据库之间的竞争不是很激烈,但随着 MySQL 的日益壮大,对甲骨文数据库的发展是不利的。”

切换数据库

2016年, 优步 (Uber)在博客中宣布已经把数据库从Postgres切换到了MySQL,该公司负责的工程师表示,Uber早期架构是由 Python 语言编写的后端应用构成,使用了Postgres数据库。但由于随后优步应用的架构发生明显改变,转型为微服务模型和新数据平台,因此需要改用基于MySQL的数据库分片层。切换到Schemaless和其它基于MySQL的后端服务最主要的原因是Postgres数据复制效率低下,需要重写每一个行索引,而MySQL只更新改变的索引。

参考资料

  1. MySQL MySQL官网 2025-01-23
  2. MySQL 8.3 发行说明 MySQL官网 2024-02-02
  3. MySQL 9.0 Release Notes MySQL官网 2025-01-23
  4. 1.4 What Is New in MySQL 9.0 MYSQL官网 2025-01-23
  5. MySQL 9.2 Release Notes MySQL官网 2025-01-23
  6. 10大最具价值开源软件 Ubuntu和MySQL上榜——中新网 中国新闻网 2023-12-12
  7. DB-Engines 2019:MySQL 获得“年度数据库”称号 新浪科技 2023-12-12
  8. History of MySQL MySQL 2025-01-23
  9. MySQL 9.1 Release Notes MySQL 官网 2025-01-23
  10. MySQL 8.4 Release Notes MySQL官网 2025-01-23
  11. MySQL 8.2 Release Notes MySQL官网 2025-01-24
  12. MySQL 8.1 发行说明 MySQL官网 2024-02-02
  13. MySQL 8.0 发行说明 MySQL官网 2024-01-12
  14. MySQL Product Archives MySQL官网 2024-01-12
  15. MySQL Connector/J 6.0.2 m1 Development Release has been released MySQL官网 2025-01-24
  16. MySQL 5.7.1 中的更改(2013-04-23,里程碑 11) MySQL官网 2024-01-12
  17. MySQL 5.6 Release Notes MySQL官网 2024-01-12
  18. MySQL Connector/J 5.1.49 GA has been released MySQL官网 2025-01-24
  19. MySQL Connector/J 6.0.2 m1 Development Release has been released MySQL官网 2025-01-24
  20. MySQL Connector/J 6.0.2 m1 Development Release has been released MySQL官网 2025-01-24
  21. Changes in MySQL Enterprise Backup 4.1.0 (2017-03-03) MySQL 官网 2025-01-24
  22. 3.11.1 Recommendation Model Types MYSQL 官网 2025-01-24
  23. Mysql数据库服务器最低要求 腾讯云 2025-01-24
  24. Supported Platforms: MySQL Database MySQL官网 2025-01-24
  25. 4 .5.4 mysqldump - 数据库备份程序 MySQL官网 2024-01-23
  26. 将 MySQL 引入 Web phpmyadmin官网 2024-01-23
  27. MySQL产品存档 MySQL官网 2024-01-23
  28. Navicat中国 Navicat中国 2023-12-07
  29. MySQL Connector/ODBC 开发人员指南 MySQL官网 2024-01-23
  30. 适用于 MySQL 的 DbNinja dbninja官网 2024-01-23
  31. DBeaver社区 DBeaver官网 2024-01-23
  32. 这是什么 sqlitemanager 2024-01-23
  33. What's this? heidisql 2024-01-23
  34. sequelpro介绍 sequelpro 2024-01-23
  35. 2009年IT市场9大失败事件 甲骨文收购MySQL 中国新闻网 2023-12-12
  36. MySQL创始人:甲骨文没有真正理由支持MySQL ——中新网 中国新闻网 2023-12-12
  37. 13 年,MySQL 之父赌赢了:另起炉灶的 MariaDB 成功上市! 腾讯网 2024-01-10
  38. 为什么 Uber Engineering 从 Postgres 切换到 MySQL 优步博客 2024-01-10
  39. 优步切换数据库:从Postgres到MySQL,架构改变 IT之家 2023-12-12