本节描述 MySQL 数据库软件的一些重要特性。在大多数方面,这些路线图适用于所有版本的 MySQL。有关特性如何在 MySQL 中引入的信息,请参阅相应手册的“In a Nutshell”部分:
-
MySQL 8.0:MySQL 8.0 中的新功能
-
MySQL 5.7:MySQL 5.7 中的新功能
内部机制和可移植性
-
使用 C 和 C++ 编写。
-
使用多种不同的编译器进行测试。
-
在多种不同的平台上工作。请参阅 https://www.mysql.com/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()
)。 -
支持
LEFT OUTER JOIN
和RIGHT OUTER JOIN
,使用标准 SQL 和 ODBC 语法。 -
支持别名在表和列上,如标准 SQL 所需。
-
支持
DELETE
、INSERT
、REPLACE
和UPDATE
,以返回更改的行数(受影响的行),或在连接到服务器时设置标志以返回匹配的行数。 -
支持 MySQL 特定的
SHOW
语句,以检索数据库、存储引擎、表和索引的信息。支持标准 SQL 中的INFORMATION_SCHEMA
数据库的实现。 -
一个
EXPLAIN
语句,以显示优化器如何解析查询。 -
函数名与表或列名独立。例如,
ABS
是一个有效的列名。唯一的限制是,对于函数调用,不允许在函数名和跟随的 “(
” 之间有空格。见 第 11.3 节,“关键字和保留字”。 -
您可以在同一语句中引用来自不同数据库的表。
安全性
-
一个非常灵活和安全的权限和密码系统,启用基于主机的验证。
-
密码安全通过加密所有密码流量来连接到服务器。
可扩展性和限制
-
支持大型数据库。我们使用 MySQL 服务器与包含 50 万记录的数据库。我们也知道用户使用 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
系统变量,客户端可以使用命名管道连接。如果服务器启用了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 8.1 开发者指南。
-
MySQL Connector/NET 使开发者能够轻松创建需要安全、高性能数据连接的 .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 程序》。 -
MySQL 程序可以使用
--help
或-?
选项来获取在线帮助。