1.3.2 MySQL 的主要功能
本节描述了 MySQL 数据库软件的一些重要 Feature。在大多数方面,该 Route 图适用于所有版本的 MySQL。有关在特定系列中引入 MySQL 的功能的信息,请参见相应手册的“总括”部分:
-
MySQL 8.0:MySQL 8.0 的新增功能
-
MySQL 5.7:第 1.4 节“ MySQL 5.7 的新增功能”
-
MySQL 5.6:MySQL 5.6 的新增功能
内部和便携性
-
用 C 和 C 编写。
-
经过广泛的不同编译器测试。
-
可在许多不同平台上使用。参见https://www.mysql.com/support/supportedplatforms/database.html。
-
为了实现可移植性,请使用 CMake 进行配置。
-
已通过 Purify(商用内存泄漏检测器)以及 GPL 工具 Valgrind(http://developer.kde.org/~sewardj/)进行了测试。
-
使用具有独立模块的多层服务器设计。
-
设计为使用内核线程完全多线程,可以轻松使用多个 CPU(如果有)。
-
提供事务性和非事务性存储引擎。
-
使用索引压缩非常快速的 B 树磁盘 table(
MyISAM
)。 -
旨在使其相对容易地添加其他存储引擎。如果要为内部数据库提供 SQL 接口,这将很有用。
-
使用非常快速的基于线程的内存分配系统。
-
使用优化的嵌套循环联接执行非常快速的联接。
-
实现内存中的哈希 table,用作临时 table。
-
使用应该尽可能快的高度优化的类库来实现 SQL 函数。通常,查询初始化后根本没有内存分配。
-
提供服务器作为在 Client 端/服务器网络环境中使用的单独程序,以及作为可嵌入(链接)到独立应用程序中的库。此类应用程序可以隔离使用,也可以在没有网络可用的环境中使用。
Data Types
-
许多数据类型:有符号/无符号整数 1、2、3、4 和 8 个字节长,FLOAT,DOUBLE,CHAR,VARCHAR,BINARY,VARBINARY,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM ,以及 OpenGIS 空间类型。参见第 11 章,数据类型。
-
固定长度和可变长度的字符串类型。
语句和函数
- 查询的SELECT列 table 和
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 要求的 table 和列别名。
-
支持DELETE,INSERT,REPLACE和UPDATE来返回已更改(受影响)的行数,或返回匹配的行数,而不是通过在连接到服务器时设置标志来返回。
-
支持特定于 MySQL 的SHOW语句,该语句检索有关数据库,存储引擎,table 和索引的信息。支持
INFORMATION_SCHEMA
数据库(根据标准 SQL 实现)。 -
一条EXPLAIN语句,用于显示优化程序如何解析查询。
-
函数名称与 table 或列名称的独立性。例如,
ABS
是有效的列名。唯一的限制是对于函数调用,函数名称和其后的“(
”之间不允许有空格。参见第 9.3 节“关键字和保留字”。 -
您可以在同一条语句中引用来自不同数据库的 table。
Security
-
特权和密码系统,非常灵活和安全,并且可以进行基于主机的验证。
-
连接到服务器时,通过对所有密码通信进行加密来实现密码安全。
可扩展性和限制
-
支持大型数据库。我们将 MySQL Server 与包含 5000 万条记录的数据库一起使用。我们也知道使用 MySQL Server 的用户有 200,000 个 table 和大约 5,000,000,000 行。
-
每个 table 最多支持 64 个索引。每个索引可以包含 1 到 16 列或部分列。 InnoDB个 table 的最大索引宽度为 767 字节或 3072 字节。参见第 14.23 节“ InnoDB 限制”。 MyISAMtable 的最大索引宽度为 1000 字节。参见第 15.2 节“ MyISAM 存储引擎”。索引可以为CHAR,VARCHAR,BLOB或TEXT列类型使用列的前缀。
Connectivity
-
Client 端可以使用多种协议连接到 MySQL Server:
-
Client 端可以在任何平台上使用 TCP/IP 套接字进行连接。
-
在 Windows 系统上,如果服务器在启用named_pipe系统变量的情况下启动,则 Client 端可以使用命名管道进行连接。如果启用了shared_memory系统变量,则 Windows 服务器也支持共享内存连接。Client 端可以使用--protocol=memory选项通过共享内存进行连接。
-
在 Unix 系统上,Client 端可以使用 Unix 域套接字文件进行连接。
-
-
MySQLClient 端程序可以用多种语言编写。用 C 编写的 Client 端库可用于用 C 或 C 编写的 Client 端,或提供 C 绑定的任何语言的 Client 端。
-
提供了 C,C,Eiffel,Java,Perl,PHP,Python,Ruby 和 Tcl 的 API,使 MySQLClient 端可以用多种语言编写。参见第 27 章,连接器和 API。
-
连接器/ ODBC(MyODBC)接口为使用 ODBC(开放数据库连接)连接的 Client 端程序提供 MySQL 支持。例如,您可以使用 MS Access 连接到 MySQL 服务器。Client 端可以在 Windows 或 Unix 上运行。连接器/ ODBC 源可用。支持所有 ODBC 2.5 功能,以及许多其他功能。参见MySQL Connector/ODBC 开发人员指南。
-
Connector/J 接口为使用 JDBC 连接的 JavaClient 端程序提供 MySQL 支持。Client 端可以在 Windows 或 Unix 上运行。连接器/ J 源可用。参见MySQL Connector/J 5.1 开发人员指南。
-
MySQL Connector/NET 使开发人员可以轻松创建需要与 MySQL 安全,高性能数据连接的.NET 应用程序。它实现了必需的 ADO.NET 接口,并集成到 ADO.NET 感知工具中。开发人员可以使用他们选择的.NET 语言来构建应用程序。 MySQL Connector/NET 是用 100%纯 C#编写的完全托管的 ADO.NET 驱动程序。参见MySQL Connector/NET 开发人员指南。
Localization
-
服务器可以用多种语言向 Client 端提供错误消息。参见第 10.12 节“设置错误消息语言”。
-
完全支持几种不同的字符集,包括
latin1
(cp1252),german
,big5
,ujis
,几种 Unicode 字符集等等。例如,在 table 名和列名中允许使用斯堪的纳维亚字符“å
”,“ä
”和“ö
”。 -
所有数据都保存在所选字符集中。
-
排序和比较是根据默认字符集和排序规则完成的。可以在启动 MySQL 服务器时更改此设置(请参见第 10.3.2 节“服务器字符集和排序规则”)。要查看非常高级的排序示例,请查看 Czech 排序代码。 MySQL Server 支持许多不同的字符集,可以在编译时和运行时指定它们。
-
服务器时区可以动态更改,并且各个 Client 端可以指定自己的时区。参见第 5.1.13 节“ MySQL 服务器时区支持”。
Client 和工具
-
MySQL 包括几个 Client 端程序和 Util。这些包括命令行程序(例如mysqldump和mysqladmin)和图形程序(例如MySQL Workbench)。
-
MySQL Server 内置了对 SQL 语句的支持,以检查,优化和修复 table。这些语句可通过mysqlcheckClient 端从命令行使用。 MySQL 还包括myisamchk,这是一个非常快的命令行 Util,用于对
MyISAM
table 执行这些操作。参见第 4 章,MySQL 程序。 -
可以使用
--help
或-?
选项调用 MySQL 程序以获得在线帮助。