1.2.2 MySQL 的主要特性
本节描述了 MySQL 数据库软件的一些重要特征。除非特别说明,MySQL 的大多数特征都适用于所有版本。关于 MySQL 在系列基础上引入新功能的信息,请参阅相应手册的““In a Nutshell””部分:
-
MySQL 8.4:第1.4节,“MySQL 8.4 中的新功能”
-
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()
)。 -
支持标准SQL和ODBC语法的
LEFT OUTER JOIN
和RIGHT OUTER JOIN
。 -
遵循标准SQL要求对表名和列名进行别名支持。
-
DELETE
、INSERT
、REPLACE
和UPDATE
可以返回修改的行数(影响行数),或者返回匹配的行数,通过在连接服务器时设置标志来实现。 -
支持MySQL特定的
SHOW
语句,用于检索数据库、存储引擎、表和索引信息。遵循标准SQL实现的INFORMATION_SCHEMA
数据库。 -
EXPLAIN
语句,用于显示优化器如何解决查询。 -
函数名不受表名或列名的影响。例如,
ABS
是一个有效的列名。唯一的限制是,对于函数调用,不允许在函数名和“(
”之间出现空格。请参阅第11.3节,“关键字和保留字”。 -
可以在同一个语句中引用来自不同数据库的表。
安全性
-
一个非常灵活和安全的权限和密码系统,支持基于主机的验证。
-
在连接到服务器时对所有密码流量进行加密以确保密码安全。
-
对大型数据库的支持。我们使用MySQL Server管理包含500万条记录的数据库,也知道有用户使用MySQL Server管理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 Server:
-
客户端可以使用TCP/IP sockets在任何平台上连接。
-
在 Windows 系统上,客户端可以使用命名管道连接,如果服务器以启用了
named_pipe
系统变量。Windows 服务器也支持共享内存连接,如果以启用了shared_memory
系统变量。客户端可以通过使用--protocol=memory
选项连接。 -
在 Unix 系统上,客户端可以使用 Unix 域 socket 文件连接。
-
-
MySQL 客户端程序可以编写在多种语言。使用 C 编写的客户端库可供 C 或 C++ 客户端使用,也可供任何提供 C 绑定的语言使用。
-
C、C++、Eiffel、Java、Perl、PHP、Python 和 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 允许开发者轻松创建需要安全、高性能数据连接的 .NET 应用程序。它实现了ADO.NET 接口和集成到 ADO.NET aware 工具中。开发者可以使用他们选择的 .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 Server Time Zone Support”。
-
MySQL 包含多个客户端和实用程序。这些包括命令行程序,如mysqldump 和 mysqladmin,以及图形程序,如MySQL Workbench。
-
MySQL Server 内置了对 SQL 语句的支持,可以检查、优化和修复表。这些语句可以从命令行通过mysqlcheck 客户端访问。MySQL 还包括myisamchk,一个非常快速的命令行实用程序,对于MyISAM 表进行操作。见第6章,“MySQL Programs”。
-
MySQL 程序可以使用
--help
或-?
选项获取在线帮助。