### 1.2.2 MySQL的主要特点

[](<>)[](<>)

本节介绍 MySQL 数据库软件的一些重要特性。在大多数方面，路线图适用于所有版本的 MySQL。有关在特定系列的基础上引入 MySQL 的功能的信息，请参阅相应手册的“In a Nutshell”部分：

-   MySQL 8.0：[第 1.3 节，“MySQL 8.0 中的新功能”](mysql-nutshell.html)

-   MySQL 5.7：[MySQL 5.7 中的新功能](https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html)

-   MySQL 5.6：[MySQL 5.6 中的新功能](https://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html)

#### 内部结构和便携性

-   用 C 和 C++ 编写。

-   使用广泛的不同编译器进行测试。

-   适用于许多不同的平台。看<https://www.mysql.com/support/supportedplatforms/database.html>.

-   为了便携性，配置使用**制作**.

-   使用 Purify（一种商业内存泄漏检测器）以及 Valgrind（一种 GPL 工具）进行了测试（[http://developer.kde.org/~西沃德/](http://developer.kde.org/~sewardj/)）。

-   采用独立模块的多层服务器设计。

-   使用内核线程设计为完全多线程，以便在可用的情况下轻松使用多个 CPU。

-   提供事务性和非事务性存储引擎。

-   使用非常快的 B 树磁盘表（`MyISAM`) 使用索引压缩。

-   旨在使添加其他存储引擎变得相对容易。如果您想为内部数据库提供 SQL 接口，这很有用。

-   使用非常快速的基于线程的内存分配系统。

-   使用优化的嵌套循环连接执行非常快速的连接。

-   实现内存中的哈希表，用作临时表。

-   使用高度优化的类库实现 SQL 函数，该类库应该尽可能快。通常在查询初始化之后根本没有内存分配。

-   将服务器作为一个单独的程序提供给客户端/服务器网络环境，并作为一个可以嵌入（链接）到独立应用程序中的库。此类应用程序可以单独使用，也可以在没有网络可用的环境中使用。

#### 数据类型

-   许多数据类型：有符号/无符号整数 1、2、3、4 和 8 字节长，[`漂浮`](floating-point-types.html),[`双倍的`](floating-point-types.html),[`字符`](char.html),[`VARCHAR`](char.html),[`二进制`](binary-varbinary.html),[`变量`](binary-varbinary.html),[`文本`](blob.html),[`斑点`](blob.html),[`日期`](datetime.html),[`时间`](time.html),[`约会时间`](datetime.html),[`时间戳`](datetime.html),[`年`](year.html),[`放`](set.html),[`枚举`](enum.html)和 OpenGIS 空间类型。看[第 11 章，*数据类型*](data-types.html).

-   固定长度和可变长度字符串类型。

#### 语句和函数

-   全面的运营商和功能支持[`选择`](select.html)列出和`在哪里`查询子句。例如：

    ```
    mysql> SELECT CONCAT(first_name, ' ', last_name)
        -> FROM citizen
        -> WHERE income/dependents > 10000 AND age > 30;
    ```

-   完全支持 SQL`通过...分组`和`订购方式`条款。支持组功能（[`数数（）`](aggregate-functions.html#function_count),[`平均（）`](aggregate-functions.html#function_avg), [`性病（）`](aggregate-functions.html#function_std), [`和（）`](aggregate-functions.html#function_sum), [`最大限度（）`](aggregate-functions.html#function_max), [`最小（）`](aggregate-functions.html#function_min)， 和[`GROUP_CONCAT()`](aggregate-functions.html#function_group-concat)）。

-   支持`左外连接`和`右外连接`使用标准 SQL 和 ODBC 语法。

-   支持标准 SQL 要求的表和列的别名。

-   支持[`删除`](delete.html), [`插入`](insert.html), [`代替`](replace.html)， 和[`更新`](update.html)返回已更改（受影响）的行数，或者通过在连接到服务器时设置标志来返回匹配的行数。

-   支持 MySQL 特定的[`显示`](show.html)检索有关数据库、存储引擎、表和索引的信息的语句。支持`INFORMATION_SCHEMA`数据库，根据标准 SQL 实现。

-   一个[`解释`](explain.html)语句来显示优化器如何解析查询。

-   函数名称独立于表或列名称。例如，`ABS`是一个有效的列名。唯一的限制是对于函数调用，函数名和“`(`”紧随其后。看[第 9.3 节，“关键字和保留字”](keywords.html).

-   您可以在同一语句中引用来自不同数据库的表。

#### 安全

-   一个非常灵活和安全的权限和密码系统，它支持基于主机的验证。

-   当您连接到服务器时，通过加密所有密码流量来确保密码安全。

#### 可扩展性和限制

-   支持大型数据库。我们将 MySQL 服务器与包含 5000 万条记录的数据库一起使用。我们还知道使用 MySQL 服务器的用户有 200,000 个表和大约 5,000,000,000 行。

-   每个表最多支持 64 个索引。每个索引可能由 1 到 16 列或部分列组成。最大索引宽度[`InnoDB`](innodb-storage-engine.html)表是 767 字节或 3072 字节。看[第 15.22 节，“InnoDB 限制”](innodb-limits.html).最大索引宽度[`MyISAM`](myisam-storage-engine.html)表是 1000 字节。看[第 16.2 节，“MyISAM 存储引擎”](myisam-storage-engine.html).索引可以使用列的前缀[`字符`](char.html),[`VARCHAR`](char.html),[`斑点`](blob.html)， 要么[`文本`](blob.html)列类型。

#### 连接性

-   客户端可以使用多种协议连接到 MySQL 服务器：

    -   客户端可以在任何平台上使用 TCP/IP 套接字进行连接。

    -   在 Windows 系统上，如果服务器以[`命名管道`](server-system-variables.html#sysvar_named_pipe)系统变量启用。如果以[`共享内存`](server-system-variables.html#sysvar_shared_memory)系统变量启用。客户端可以通过共享内存使用[`--protocol=内存`](connection-options.html#option_general_protocol)选项。

    -   在 Unix 系统上，客户端可以使用 Unix 域套接字文件进行连接。

-   MySQL 客户端程序可以用多种语言编写。用 C 编写的客户端库可用于用 C 或 C++ 编写的客户端，或者任何提供 C 绑定的语言。

-   提供用于 C、C++、Eiffel、Java、Perl、PHP、Python、Ruby 和 Tcl 的 API，使 MySQL 客户端能够以多种语言编写。看[第 29 章，*连接器和 API*](connectors-apis.html).

-   Connector/ODBC (MyODBC) 接口为使用 ODBC（开放式数据库连接）连接的客户端程序提供 MySQL 支持。例如，您可以使用 MS Access 连接到您的 MySQL 服务器。客户端可以在 Windows 或 Unix 上运行。连接器/ODBC 源可用。支持所有 ODBC 2.5 功能，以及许多其他功能。看[MySQL 连接器/ODBC 开发人员指南](https://dev.mysql.com/doc/connector-odbc/en/).

-   Connector/J 接口为使用 JDBC 连接的 Java 客户端程序提供 MySQL 支持。客户端可以在 Windows 或 Unix 上运行。连接器/J 源可用。看[MySQL 连接器/J 5.1 开发者指南](https://dev.mysql.com/doc/connector-j/5.1/en/).

-   MySQL Connector/NET 使开发人员能够轻松创建需要与 MySQL 进行安全、高性能数据连接的 .NET 应用程序。它实现了所需的 ADO.NET 接口并集成到 ADO.NET 感知工具中。开发人员可以使用他们选择的 .NET 语言来构建应用程序。MySQL Connector/NET 是一个完全托管的 ADO.NET 驱动程序，用 100% 纯 C# 编写。看[MySQL 连接器/NET 开发人员指南](https://dev.mysql.com/doc/connector-net/en/).

#### 本土化

-   服务器可以以多种语言向客户端提供错误消息。看[第 10.12 节，“设置错误消息语言”](error-message-language.html).

-   完全支持多种不同的字符集，包括`拉丁语1`(cp1252),`德语`,`大五`,`乌吉斯`、多个 Unicode 字符集等。例如，斯堪的纳维亚字符“`一种`”, “`一种`“ 和 ”`ö`” 在表名和列名中是允许的。

-   所有数据都保存在所选字符集中。

-   根据默认字符集和排序规则进行排序和比较。可以在 MySQL 服务器启动时更改此设置（请参阅[第 10.3.2 节，“服务器字符集和排序规则”](charset-server.html)）。要查看非常高级的排序示例，请查看捷克语排序代码。MySQL 服务器支持许多不同的字符集，可以在编译时和运行时指定。

-   服务器时区可以动态更改，各个客户端可以指定自己的时区。看[第 5.1.15 节，“MySQL 服务器时区支持”](time-zone-support.html).

#### 客户端和工具

-   MySQL 包括几个客户端和实用程序。这些包括命令行程序，例如[**mysql转储**](mysqldump.html)和[**mysql管理员**](mysqladmin.html)，以及图形程序，例如[MySQL 工作台](workbench.html).

-   MySQL 服务器内置支持 SQL 语句来检查、优化和修复表。这些语句可从命令行通过[**mysql检查**](mysqlcheck.html)客户。MySQL 还包括[**迈萨姆奇克**](myisamchk.html)，一个非常快速的命令行实用程序，用于执行这些操作`MyISAM`表。看[第 4 章，*MySQL 程序*](programs.html).

-   MySQL 程序可以用`- 帮助`要么`-？`获得在线帮助的选项。
