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