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 \u003c字段名表\u003e FROM \u003c表或视图名\u003e WHERE \u003c查询条件\u003e”的格式, 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只更新改变的索引。
参考资料
MySQL.MySQL官网.2025-01-23
MySQL 8.3 发行说明.MySQL官网.2024-02-02
MySQL 9.0 Release Notes.MySQL官网.2025-01-23
1.4 What Is New in MySQL 9.0.MYSQL官网.2025-01-23
MySQL 9.2 Release Notes.MySQL官网.2025-01-23
10大最具价值开源软件 Ubuntu和MySQL上榜——中新网.中国新闻网.2023-12-12
DB-Engines 2019:MySQL 获得“年度数据库”称号.新浪科技.2023-12-12
History of MySQL.MySQL.2025-01-23
MySQL 9.1 Release Notes.MySQL 官网.2025-01-23
MySQL 8.4 Release Notes.MySQL官网.2025-01-23
MySQL 8.2 Release Notes.MySQL官网.2025-01-24
MySQL 8.1 发行说明.MySQL官网.2024-02-02
MySQL 8.0 发行说明.MySQL官网.2024-01-12
MySQL Product Archives.MySQL官网.2024-01-12
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官网.2025-01-24
MySQL 5.7.1 中的更改(2013-04-23,里程碑 11).MySQL官网.2024-01-12
MySQL 5.6 Release Notes.MySQL官网.2024-01-12
MySQL Connector/J 5.1.49 GA has been released.MySQL官网.2025-01-24
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官网.2025-01-24
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官网.2025-01-24
Changes in MySQL Enterprise Backup 4.1.0 (2017-03-03).MySQL 官网.2025-01-24
3.11.1 Recommendation Model Types.MYSQL 官网.2025-01-24
Mysql数据库服务器最低要求.腾讯云.2025-01-24
Supported Platforms: MySQL Database.MySQL官网.2025-01-24
4 .5.4 mysqldump - 数据库备份程序.MySQL官网.2024-01-23
将 MySQL 引入 Web.phpmyadmin官网.2024-01-23
MySQL产品存档.MySQL官网.2024-01-23
Navicat中国.Navicat中国.2023-12-07
MySQL Connector/ODBC 开发人员指南.MySQL官网.2024-01-23
适用于 MySQL 的 DbNinja.dbninja官网.2024-01-23
DBeaver社区 .DBeaver官网.2024-01-23
这是什么.sqlitemanager.2024-01-23
What's this?.heidisql.2024-01-23
sequelpro介绍.sequelpro.2024-01-23
2009年IT市场9大失败事件 甲骨文收购MySQL.中国新闻网.2023-12-12
MySQL创始人:甲骨文没有真正理由支持MySQL ——中新网.中国新闻网.2023-12-12
13 年,MySQL 之父赌赢了:另起炉灶的 MariaDB 成功上市!.腾讯网.2024-01-10
为什么 Uber Engineering 从 Postgres 切换到 MySQL.优步博客.2024-01-10
优步切换数据库:从Postgres到MySQL,架构改变.IT之家.2023-12-12