本节介绍MySQL数据库软件的一些重要特性。在大多数方面,路线图适用于所有版本的MySQL。关于MySQL在特定系列基础上引入的特性的信息,请参见相应手册的“简而言之”部分:
MySQL 8.0: 1.3节,“MySQL 8.0的新特性”
MySQL 5.7: MySQL 5.7的新特性
MySQL 5.6:什么是新的MySQL 5.6
内部结构和可移植性
用C和c++写的。
用各种不同的编译器进行测试。
可以在许多不同的平台上工作。见https://www.mysql.com/support/supportedplatforms/database.html。
为了可移植性,使用CMake配置。
用Purify(一个商业内存泄漏检测器)和Valgrind(一个GPL工具)进行测试(http://developer.kde.org/~sewardj/)。
采用具有独立模块的多层服务器设计。
设计为使用内核线程的完全多线程,方便地使用多个cpu(如果它们可用的话)。
提供事务性和非事务性存储引擎。
使用非常快速的B-tree磁盘表(MyISAM)和索引压缩。
设计的目的是使添加其他存储引擎相对容易。如果您想为内部数据库提供SQL接口,这是非常有用的。
使用非常快速的基于线程的内存分配系统。
使用优化的嵌套循环联接执行非常快的联接。
实现内存中的哈希表,这些哈希表被用作临时表。
使用高度优化的类库实现SQL函数,该类库应该尽可能快。通常在查询初始化之后根本没有内存分配。
提供服务器作为一个单独的程序在客户端/服务器网络环境中使用,并作为一个库,可以嵌入(链接)到独立的应用程序。这种应用程序可以在隔离环境中使用,也可以在没有网络可用的环境中使用。
数据类型
许多数据类型:有符号/无符号整数1、2、3、4和8字节长、FLOAT、DOUBLE、CHAR、VARCHAR、BINARY、VARBINARY、TEXT、BLOB、DATE、TIME、DATETIME、TIMESTAMP、YEAR、SET、ENUM和OpenGIS空间类型。参见第11章,数据类型。
固定长度和可变长度的字符串类型。
语句和函数
查询的SELECT列表和WHERE子句中提供完整的操作符和函数支持。例如:
mysql> SELECT CONCAT(first_name, ' last_name ')
- >从公民
->,其中收入/受养人> 10000及年龄> 30;
完全支持SQL GROUP BY和ORDER BY子句。支持组函数(COUNT(), AVG(), STD(), SUM(), MAX(), MIN(),和GROUP_CONCAT())。
使用标准SQL和ODBC语法支持左外连接和右外连接。
支持标准SQL所要求的表和列上的别名。
支持删除、插入、替换和更新,以返回被更改(受影响)的行数,或者在连接到服务器时通过设置标志返回匹配的行数。
支持特定于mysql的SHOW语句,这些语句检索有关数据库、存储引擎、表和索引的信息。支持INFORMATION_SCHEMA数据库,按照标准SQL实现。
说明优化器如何解析查询的EXPLAIN语句。
函数名与表名或列名的独立性。例如,ABS是一个有效的列名。唯一的限制是,对于函数调用,函数名和后面的“(”之间不允许有空格。见9.3节“关键字和保留字”。
您可以在同一语句中引用来自不同数据库的表。
安全
一种非常灵活和安全的特权和密码系统,支持基于主机的验证。
密码安全是当你连接到一个服务器时,对所有的密码流量进行加密。
可伸缩性和限制
支持大型数据库。我们使用MySQL服务器,数据库包含5000万条记录。我们也知道使用MySQL服务器的用户有20万个表和大约50亿行。
支持每个表最多64个索引。每个索引可以由1到16列或部分列组成。InnoDB表的最大索引宽度是767字节或3072字节。参见第15.22节“InnoDB限制”。MyISAM表的最大索引宽度是1000字节。参见16.2节“MyISAM存储引擎”。索引可以为CHAR、VARCHAR、BLOB或文本列类型使用列的前缀。
连接
客户端可以连接到MySQL服务器使用几种协议:
客户端可以在任何平台上使用TCP/IP套接字连接。
在Windows系统中,如果服务器启动时启用了named_pipe系统变量,客户端可以使用命名管道连接。如果启用了shared_memory系统变量,Windows服务器也支持共享内存连接。客户端可以通过使用——protocol=memory选项来连接共享内存。
在Unix系统上,客户端可以使用Unix域套接字文件连接。
MySQL客户端程序可以用多种语言编写。用C编写的客户端库可用于用C或c++编写的客户端,或任何提供C绑定的语言。
可以使用C、c++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的api,使MySQL客户端可以用多种语言编写。参见第29章,连接器和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 5.1开发者指南。
MySQL Connector/NET使开发人员能够轻松创建。NET应用程序,这些应用程序需要与MySQL进行安全、高性能的数据连接。它实现了所需的ADO。NET接口并集成到ADO中。净意识的工具。开发人员可以使用他们所选择的。net语言构建应用程序。MySQL Connector/NET是一个完全托管的ADO。NET驱动程序写在100%纯c#。参见MySQL Connector/NET开发指南。
本地化
服务器可以用多种语言向客户端提供错误消息。参见第10.12节“设置错误信息语言”。
完全支持几种不同的字符集,包括latin1 (cp1252)、german、big5、ujis、几种Unicode字符集等等。例如,表和列名中允许使用斯堪的纳维亚字符“a”、“a”和“o”。
所有数据都保存在所选的字符集中。
排序和比较是根据默认字符集和排序规则进行的。可以在MySQL服务器启动时更改(参见10.3.2章节“服务器字符集和排序”)。要查看非常高级排序的示例,请查看捷克排序代码。MySQL服务器支持许多不同的字符集,可以在编译时和运行时指定。
服务器时区可以动态更改,各个客户机可以指定自己的时区。参考章节5.1.15“MySQL服务器时区支持”。
客户和工具
MySQL包括几个客户端和实用程序。这包括命令行程序,如mysqldump和mysqladmin,以及图形程序,如MySQL Workbench。
MySQL服务器内置支持SQL语句来检查、优化和修复表。这些语句可以通过mysqlcheck客户端从命令行获得。MySQL还包括myisamchk,这是一个非常快速的命令行工具,用于在MyISAM表上执行这些操作。参见第4章,MySQL程序。
MySQL程序可以用——help或-?选择获取在线帮助。