本节介绍 MySQL 数据库软件的一些重要特性。在大多数情况下,路线图适用于所有版本的 MySQL。有关在特定系列的 MySQL 中引入的功能的信息,请参阅相应手册中的““概览”部分
MySQL 8.4:自 MySQL 8.0 以来 MySQL 8.4 中的新增功能
MySQL 8.0:MySQL 8.0 中的新增功能
MySQL 5.7:MySQL 5.7 中的新增功能
内部结构和可移植性
用 C 和 C++ 编写。
使用各种不同的编译器进行测试。
适用于许多不同的平台。请参阅 https://www.mysqlserver.cn/support/supportedplatforms/database.html。
为了便于移植,使用 CMake 进行配置。
使用 Purify(一种商业内存泄漏检测器)以及 Valgrind(一种 GPL 工具(https://valgrind.org/))进行测试。
使用具有独立模块的多层服务器设计。
设计为使用内核线程完全多线程化,以便在有多个 CPU 可用时轻松使用它们。
提供事务性和非事务性存储引擎。
使用非常快的 B 树磁盘表 (
MyISAM
) 和索引压缩。设计为可以相对容易地添加其他存储引擎。如果您想为内部数据库提供 SQL 接口,这将非常有用。
使用非常快速的基于线程的内存分配系统。
使用优化的嵌套循环连接执行非常快速的连接。
实现内存哈希表,用作临时表。
使用高度优化的类库实现 SQL 函数,该库应尽可能快。通常在查询初始化后根本没有内存分配。
将服务器作为单独的程序提供,用于客户端/服务器网络环境。
数据类型
语句和函数
在
SELECT
列表和查询的WHERE
子句中完全支持运算符和函数。例如mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM citizen -> WHERE income/dependents > 10000 AND age > 30;
完全支持 SQL
GROUP BY
和ORDER BY
子句。支持组函数(COUNT()
、AVG()
、STD()
、SUM()
、MAX()
、MIN()
和GROUP_CONCAT()
)。使用标准 SQL 和 ODBC 语法支持
LEFT OUTER JOIN
和RIGHT OUTER JOIN
。根据标准 SQL 的要求支持表和列的别名。
支持
DELETE
、INSERT
、REPLACE
和UPDATE
返回已更改(受影响)的行数,或者通过在连接到服务器时设置标志来返回匹配的行数。支持特定于 MySQL 的
SHOW
语句,这些语句检索有关数据库、存储引擎、表和索引的信息。支持根据标准 SQL 实现的INFORMATION_SCHEMA
数据库。一个
EXPLAIN
语句,用于显示优化器如何解析查询。函数名称独立于表或列名称。例如,
ABS
是一个有效的列名。唯一的限制是,对于函数调用,函数名称与其后的 “(
” 之间不允许有空格。请参阅 第 11.3 节:关键字和保留字。您可以在同一个语句中引用来自不同数据库的表。
安全
一种非常灵活和安全的权限和密码系统,支持基于主机的验证。
通过在连接到服务器时加密所有密码流量来确保密码安全。
可扩展性和限制
支持大型数据库。我们使用 MySQL 服务器处理包含 5000 万条记录的数据库。我们也知道有些用户使用 MySQL 服务器处理 200,000 个表和大约 5,000,000,000 行数据。
每个表最多支持 64 个索引。每个索引可以包含 1 到 16 列或列的一部分。
InnoDB
表的最大索引宽度为 767 字节或 3072 字节。请参阅 第 17.21 节:InnoDB 限制。MyISAM
表的最大索引宽度为 1000 字节。请参阅 第 18.2 节:MyISAM 存储引擎。对于CHAR
、VARCHAR
、BLOB
或TEXT
列类型,索引可以使用列的前缀。
连接
客户端可以使用多种协议连接到 MySQL 服务器
客户端可以使用任何平台上的 TCP/IP 套接字进行连接。
在 Windows 系统上,如果服务器是在启用了
named_pipe
系统变量的情况下启动的,则客户端可以使用命名管道进行连接。如果 Windows 服务器是在启用了shared_memory
系统变量的情况下启动的,则它们还支持共享内存连接。客户端可以通过使用--protocol=memory
选项来通过共享内存进行连接。在 Unix 系统上,客户端可以使用 Unix 域套接字文件进行连接。
MySQL 客户端程序可以用多种语言编写。用 C 编写的客户端库可用于用 C 或 C++ 编写的客户端,或用于提供 C 绑定的任何语言。
提供了 C、C++、Eiffel、Java、Perl、PHP、Python、Ruby 和 Tcl 的 API,可以用多种语言编写 MySQL 客户端。参见 第 31 章,连接器和 API。
Connector/ODBC (MyODBC) 接口为使用 ODBC(开放数据库连接)连接的客户端程序提供 MySQL 支持。例如,您可以使用 MS Access 连接到 MySQL 服务器。客户端可以在 Windows 或 Unix 上运行。Connector/ODBC 源代码可用。支持所有 ODBC 2.5 函数以及许多其他函数。参见 MySQL Connector/ODBC 开发者指南。
Connector/J 接口为使用 JDBC 连接的 Java 客户端程序提供 MySQL 支持。客户端可以在 Windows 或 Unix 上运行。Connector/J 源代码可用。参见 MySQL Connector/J 开发者指南。
MySQL Connector/NET 使开发人员能够轻松创建需要与 MySQL 进行安全、高性能数据连接的 .NET 应用程序。它实现了所需的 ADO.NET 接口并集成到支持 ADO.NET 的工具中。开发人员可以使用他们选择的 .NET 语言构建应用程序。MySQL Connector/NET 是一个完全托管的 ADO.NET 驱动程序,采用 100% 纯 C# 编写。参见 MySQL Connector/NET 开发者指南。
本地化
服务器可以多种语言向客户端提供错误消息。参见 第 12.12 节,“设置错误消息语言”。
完全支持几种不同的字符集,包括
latin1
(cp1252)、german
、big5
、ujis
、几种 Unicode 字符集等等。例如,表名和列名中允许使用斯堪的纳维亚字符 “å
”、“ä
” 和 “ö
”。所有数据都以所选字符集保存。
排序和比较是根据默认字符集和排序规则进行的。可以在启动 MySQL 服务器时更改此设置(参见 第 12.3.2 节,“服务器字符集和排序规则”)。要查看非常高级排序的示例,请查看捷克语排序代码。MySQL 服务器支持许多不同的字符集,可以在编译时和运行时指定。
服务器时区可以动态更改,并且各个客户端可以指定自己的时区。参见 第 7.1.15 节,“MySQL 服务器时区支持”。
客户端和工具
MySQL 包含几个客户端和实用程序。这些程序包括命令行程序,例如 mysqldump 和 mysqladmin,以及图形程序,例如 MySQL Workbench。
MySQL 服务器内置了对 SQL 语句的支持,可以检查、优化和修复表。可以通过 mysqlcheck 客户端从命令行使用这些语句。MySQL 还包括 myisamchk,这是一个非常快的命令行实用程序,用于对
MyISAM
表执行这些操作。参见 第 6 章,MySQL 程序。可以使用
--help
或-?
选项调用 MySQL 程序以获取在线帮助。