Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

1.2.2 MySQL 的主要特性

本节描述 MySQL 数据库软件的一些重要特性。在大多数方面,这些路线图适用于所有版本的 MySQL。有关特性如何在 MySQL 中引入的信息,请参阅相应手册的“In a Nutshell”部分:

内部机制和可移植性

  • 使用 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 BYORDER BY 子句。支持组函数(COUNT()AVG()STD()SUM()MAX()MIN()GROUP_CONCAT())。

  • 支持 LEFT OUTER JOINRIGHT OUTER JOIN,使用标准 SQL 和 ODBC 语法。

  • 支持别名在表和列上,如标准 SQL 所需。

  • 支持 DELETEINSERTREPLACEUPDATE,以返回更改的行数(受影响的行),或在连接到服务器时设置标志以返回匹配的行数。

  • 支持 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 存储引擎”。索引可以使用 CHARVARCHARBLOBTEXT 列类型的前缀。

连接性

  • 客户端可以使用多种协议连接到 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)、germanbig5ujis、多种 Unicode 字符集等。例如,斯堪的纳维亚字符 åäö 在表和列名中都是允许的。

  • 所有数据都以选择的字符集保存。

  • 排序和比较根据默认字符集和排序规则进行。可以在 MySQL 服务器启动时更改(见 第 12.3.2 节,“服务器字符集和排序规则”)。要查看高级排序的示例,请查看捷克排序代码。MySQL 服务器支持多种字符集,可以在编译时和运行时指定。

  • 服务器时区可以动态更改,个别客户端可以指定自己的时区。见 第 7.1.15 节,“MySQL 服务器时区支持”

客户端和工具

  • MySQL 包括多个客户端和实用程序。这些包括命令行程序,如 mysqldumpmysqladmin,以及图形程序,如 MySQL Workbench

  • MySQL 服务器具有内置支持 SQL 语句来检查、优化和修复表。这些语句可以通过命令行中的 mysqlcheck 客户端获得。MySQL 还包括 myisamchk,一个非常快速的命令行实用程序,用于在 MyISAM 表上执行这些操作。见 第 6 章,《MySQL 程序》

  • MySQL 程序可以使用 --help-? 选项来获取在线帮助。