目录
MySQL™软件提供了一个非常快速,多线程,多用户,强大的SQL(结构化查询语言)数据库服务器。 MySQL Server适用于关键任务,重载生产系统以及嵌入大规模部署的软件。 Oracle是Oracle Corporation和/或其附属公司的注册商标。 MySQL是Oracle Corporation和/或其附属公司的商标,未经Oracle明确书面授权,客户不得使用。 其他名称可能是其各自所有者的商标。
MySQL软件是Dual Licensed。 用户可以根据GNU通用公共许可证( http://www.fsf.org/licenses/ ) 的条款选择将MySQL软件用作开源产品, 也可以从Oracle购买标准商业许可证。 有关 我们的许可政策的更多信息, 请 访问http://www.mysql.com/company/legal/licensing/ 。
以下列表描述了本手册中特别感兴趣的一些部分:
有关MySQL数据库服务器功能的讨论,请参见 第1.3.2节“MySQL的主要功能” 。
有关新MySQL功能的概述,请参见 第1.4节“MySQL 8.0中 的新增功能 ” 。 有关每个版本中的更改的信息,请参阅 发行说明 。
有关安装说明,请参阅 第2章, 安装和升级MySQL 。 有关升级MySQL的信息,请参见 第2.11节“升级MySQL” 。
有关MySQL数据库服务器的教程简介,请参阅 第3章 教程 。
有关配置和管理MySQL Server的信息,请参阅 第5章, MySQL服务器管理 。
有关MySQL安全性的信息,请参阅 第6章, 安全性 。
有关设置复制服务器的信息,请参见 第17章, 复制 。
有关MySQL Enterprise(具有高级功能和管理工具的商业MySQL版本)的信息,请参阅 第30章, MySQL Enterprise Edition 。
有关MySQL数据库服务器及其功能的 常见问题的 答案,请参阅 附录A, MySQL 8.0常见问题解答 。
有关新功能和错误修复的历史记录,请参阅 发行说明 。
要报告问题或错误,请使用
第1.7节“如何报告错误或问题”中的说明
。
如果您在MySQL服务器中发现敏感的安全漏洞,请立即通过发送电子邮件告知我们
。
例外:支持客户应向Oracle支持部门报告所有问题,包括安全漏洞。
<secalert_us@oracle.com>
这是MySQL数据库系统8.0版到8.0.18版的参考手册。
MySQL 8.0的次要版本之间的差异在本文中引用了版本号(8.0。
x
)。
有关许可证信息,请参阅
法律声明
。
由于MySQL 8.0和以前版本之间存在许多功能和其他差异,因此本手册不适用于旧版本的MySQL软件。 如果您使用的是早期版本的MySQL软件,请参阅相应的手册。 例如, MySQL 5.7参考手册 涵盖5.7系列MySQL软件版本。
由于本手册可作为参考,因此不提供有关SQL或关系数据库概念的一般说明。 它也没有教您如何使用您的操作系统或命令行解释器。
MySQL数据库软件正在不断发展,参考手册也经常更新。 最新版本的手册可在线搜索, 网址 为 https://dev.mysql.com/doc/ 。 其他格式也可用,包括HTML,PDF和EPUB版本。
参考手册源文件以DocBook XML格式编写。 HTML版本和其他格式是自动生成的,主要使用DocBook XSL样式表。 有关DocBook的信息,请参阅 http://docbook.org/
MySQL的源代码本身包含使用Doxygen编写的内部文档。 生成的Doxygen内容可用 https://dev.mysql.com/doc/index-other.html 。 也可以使用 第2.9.7节“生成MySQL Doxygen文档内容”中 的说明从MySQL源代码分发本地生成此内容 。
如果您对使用MySQL有疑问,可以使用我们的邮件列表或论坛询问他们。 请参见 第1.6.2节“MySQL邮件列表” 和 第1.6.3节“MySQL论坛中的MySQL社区支持” 。 如果您有关于手册本身的补充或更正的建议,请将它们发送到 http://www.mysql.com/company/contact/ 。
本手册最初由David Axmark和Michael “ Monty ” Widenius 编写 。 它由MySQL文档团队维护,包括Chris Cole,Paul DuBois,Margaret Fisher,Edward Gilmore,Stefan Hinz,David Moss,Philip Olson,Daniel Price,Daniel So和Jon Stephens。
本手册使用某些印刷约定:
Text in this style
用于SQL语句;
数据库,表和列名称;
程序清单和源代码;
和环境变量。
示例:
“
要重新加载授权表,请使用该
FLUSH
PRIVILEGES
语句。
”
Text in this style
表示您在示例中键入的输入。
此样式的文本 表示可执行程序和脚本的名称,例如 mysql (MySQL命令行客户端程序)和 mysqld (MySQL服务器可执行文件)。
Text in this style
用于变量输入,您应该替换自己选择的值。
此样式的文本 用于强调。
这种风格的文字 用于表格标题,并特别强调。
Text in this style
用于指示影响程序执行方式的程序选项,或者提供程序以某种方式运行所需的信息。
例如
:
“
该
--host
选项(缩写形式
-h
)告诉
MySQL的
客户端程序,它应该连接到MySQL服务器的主机名或IP地址
”
。
文件名和目录名的写法如下:
“
全局
my.cnf
文件位于
/etc
目录中。
”
字符序列的写法如下:
“
要指定通配符,请使用
'
%
'
字符。
”
当显示要在特定程序内执行的命令时,命令前面显示的提示指示要使用的命令。
例如,
shell>
表示您从登录shell执行的命令
root-shell>
类似但应该执行
root
,并
mysql>
指示您从
mysql
客户端程序
执行的语句
:
shell>type a shell command here
root-shell> mysql>type a shell command as
root
heretype a mysql statement here
在一些区域中,可以将不同的系统彼此区分开以示出命令应该在两个不同的环境中执行。
例如,复制工作时的命令可能与前缀
master
和
slave
:
主人>type a mysql command on the replication master here
奴隶>type a mysql command on the replication slave here
该 “ 壳 ” 是您的命令解释器。 在Unix上,这通常是一个程序,如 sh , csh 或 bash 。 在Windows上,等效程序是 command.com 或 cmd.exe ,通常在控制台窗口中运行。
输入示例中显示的命令或语句时,请不要键入示例中显示的提示。
数据库,表和列名称通常必须替换为语句。
为了指示这样的取代是必要的,本手册使用
db_name
,
tbl_name
和
col_name
。
例如,您可能会看到如下语句:
MySQL的> SELECT col_name
FROM db_name
.tbl_name
;
这意味着如果您要输入类似的语句,您将提供自己的数据库,表和列名称,可能是这样的:
MySQL的> SELECT author_name FROM biblio_db.author_list;
SQL关键字不区分大小写,可以用任何字母大小写。 本手册使用大写。
在语法描述中,方括号(
“
[
”
和
“
]
”
)表示可选的单词或子句。
例如,在以下语句中,
IF
EXISTS
是可选的:
DROP TABLE [IF EXISTS] tbl_name
当语法元素由许多替代项组成时,替代项由竖线(
“
|
”
)
分隔
。
当从一组的一个选择部件
可以
被选择,则将替换方括号内所列的(
“
[
”
和
“
]
”
):
TRIM([[BOTH | LEADING | TRAILING] [remstr
] FROM]str
)
当
必须
选择
一组选项中的一个成员时
,替代项将列在大括号(
“
{
”
和
“
}
”
)中:
{DESCRIBE | DESC}tbl_name
[col_name
|wild
]
省略号(
...
)表示省略了语句的一部分,通常是为了提供更复杂语法的更短版本。
例如,
SELECT ...
INTO
OUTFILE
是
SELECT
语句
形式的简写,该
语句
INTO OUTFILE
在语句的其他部分后面
有一个
子句。
省略号还可以指示可以重复语句的前面语法元素。
在下面的示例中,
reset_option
可以给出
多个
值,每个值在第一个之后以逗号开头:
重置reset_option
[,reset_option
] ......
使用Bourne shell语法显示用于设置shell变量的命令。
例如,设置
CC
环境变量并运行
configure
命令
的顺序
在Bourne shell语法中如下所示:
外壳> CC=gcc ./configure
如果您使用的是 csh 或 tcsh ,则必须以不同的方式发出命令:
shell>setenv CC gcc
shell>./configure
MySQL是最受欢迎的开源SQL数据库管理系统,由Oracle Corporation开发,分发和支持。
MySQL网站( http://www.mysql.com/ )提供有关MySQL软件的最新信息。
MySQL是一个数据库管理系统。
数据库是数据的结构化集合。 它可以是从简单的购物清单到图片库或公司网络中的大量信息。 要添加,访问和处理存储在计算机数据库中的数据,您需要一个数据库管理系统,如MySQL Server。 由于计算机非常擅长处理大量数据,因此数据库管理系统在计算,独立实用程序或其他应用程序的一部分中发挥着核心作用。
MySQL数据库是关系型的。
关系数据库将数据存储在单独的表中,而不是将所有数据放在一个大的库房中。 数据库结构被组织成针对速度优化的物理文件。 逻辑模型具有数据库,表,视图,行和列等对象,可提供灵活的编程环境。 您可以设置管理不同数据字段之间关系的规则,例如一对一,一对多,唯一,必需或可选,以及 不同表之间的 “ 指针 ” 。 数据库强制执行这些规则,因此使用设计良好的数据库,您的应用程序永远不会看到不一致,重复,孤立,过时或丢失的数据。
“ MySQL ” 的SQL部分 代表 “ 结构化查询语言 ” 。 SQL是用于访问数据库的最常用的标准化语言。 根据您的编程环境,您可以直接输入SQL(例如,生成报告),将SQL语句嵌入到用其他语言编写的代码中,或使用隐藏SQL语法的特定于语言的API。
SQL由ANSI / ISO SQL标准定义。 SQL标准自1986年以来一直在发展,并且存在多个版本。 在本手册中, “ SQL-92 ” 是指1992年发布的标准, “ SQL:1999 ” 是指1999年发布的标准, “ SQL:2003 ” 是指当前版本的标准。 我们 在任何时候都 使用短语 “ SQL标准 ” 来表示当前版本的SQL标准。
MySQL软件是开源的。
开源意味着任何人都可以使用和修改软件。 任何人都可以从互联网上下载MySQL软件并使用它而无需支付任何费用。 如果您愿意,您可以学习源代码并根据需要进行更改。 MySQL软件使用GPL(GNU通用公共许可证) http://www.fsf.org/licenses/ 来定义在不同情况下您可能和不可以使用该软件的内容。 如果您对GPL感到不舒服或需要将MySQL代码嵌入到商业应用程序中,您可以从我们这里购买商业许可版本。 有关更多信息,请参阅MySQL许可概述( http://www.mysql.com/company/legal/licensing/ )。
MySQL数据库服务器非常快速,可靠,可扩展且易于使用。
如果您正在寻找,那么您应该尝试一下。 MySQL服务器可以在台式机或笔记本电脑上与其他应用程序,Web服务器等一起轻松运行,几乎不需要关注。 如果您将整台机器专用于MySQL,则可以调整设置以利用所有可用的内存,CPU功率和I / O容量。 MySQL还可以扩展到联网的机器集群。
MySQL Server最初是为了比现有解决方案更快地处理大型数据库而开发的,并且已经成功地在高要求的生产环境中使用了好几年。 虽然在不断发展的今天,MySQL服务器提供了丰富而有用的功能集。 它的连接性,速度和安全性使MySQL Server非常适合访问Internet上的数据库。
MySQL Server适用于客户端/服务器或嵌入式系统。
MySQL数据库软件是一个客户端/服务器系统,由支持不同后端的多线程SQL服务器,几个不同的客户端程序和库,管理工具以及各种应用程序编程接口(API)组成。
我们还提供MySQL Server作为嵌入式多线程库,您可以将其链接到您的应用程序,以获得更小,更快,更易于管理的独立产品。
提供了大量贡献的MySQL软件。
MySQL Server具有与我们的用户密切合作开发的一组实用功能。 您最喜欢的应用程序或语言很可能支持MySQL数据库服务器。
发音为 “ MySQL ” 的官方方式 是 “ 我的Ess Que Ell ” (不是 “ 我的续集 ” ),但我们不介意你将它发音为 “ 我的续集 ” 或其他一些本地化的方式。
本节介绍MySQL数据库软件的一些重要特性。 在大多数方面,该路线图适用于所有版本的MySQL。 有关在特定于系列的基础上引入MySQL的功能的信息,请参阅 相应手册 的 “ 在坚果壳中 ” 部分:
MySQL 8.0: 第1.4节“MySQL 8.0中的新功能”
MySQL 5.7: MySQL 5.7中的新功能
MySQL 5.6: MySQL 5.6中的新功能
MySQL 5.5: MySQL 5.5中的新功能
用C和C ++编写。
经过广泛的不同编译器测试。
适用于许多不同的平台。 请参阅 https://www.mysql.com/support/supportedplatforms/database.html 。
为了便于携带, 在MySQL 5.5及更高版本中 使用 CMake 。 以前的系列使用GNU Automake,Autoconf和Libtool。
使用Purify(商业内存泄漏检测器)以及GPL工具Valgrind( http://developer.kde.org/~sewardj/ )进行测试。
使用具有独立模块的多层服务器设计。
设计为使用内核线程完全多线程,以便在可用时轻松使用多个CPU。
提供事务性和非事务性存储引擎。
使用
MyISAM
具有索引压缩的
非常快速的B树磁盘表(
)。
旨在使添加其他存储引擎相对容易。 如果要为内部数据库提供SQL接口,这非常有用。
使用非常快速的基于线程的内存分配系统。
使用优化的嵌套循环连接执行非常快速的连接。
实现内存中的哈希表,用作临时表。
使用应尽可能快的高度优化的类库实现SQL函数。 通常在查询初始化之后根本没有内存分配。
将服务器作为单独的程序提供,用于客户端/服务器网络环境,以及作为可嵌入(链接)到独立应用程序的库。 此类应用程序可以单独使用,也可以在没有网络的环境中使用。
查询
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
以返回更改(受影响)的行数,或返回通过连接到服务器时设置标志,而不是匹配的行的数量。
支持特定于MySQL的
SHOW
语句,用于检索有关数据库,存储引擎,表和索引的信息。
支持
INFORMATION_SCHEMA
数据库,根据标准SQL实现。
一个
EXPLAIN
语句来显示优化器如何解决一个查询。
表名或列名中函数名的独立性。
例如,
ABS
是一个有效的列名。
唯一的限制是,对于函数调用,函数名和
它后面
的
“
(
”
之间不允许有空格
。
请参见
第9.3节“关键字和保留字”
。
您可以在同一语句中引用来自不同数据库的表。
特权和密码系统,非常灵活和安全,可以进行基于主机的验证。
连接到服务器时加密所有密码流量的密码安全性。
支持大型数据库。 我们将MySQL Server与包含5000万条记录的数据库结合使用。 我们也知道使用MySQL服务器的用户有200,000个表和大约5,000,000,000行。
每个表最多支持64个索引。
每个索引可以包含1到16列或部分列。
InnoDB
表
的最大索引宽度为
767字节或3072字节。
请参见
第15.6.1.6节“InnoDB表的限制”
。
MyISAM
表
的最大索引宽度为
1000个字节。
请参见
第16.2节“MyISAM存储引擎”
。
索引可使用的柱的前缀
CHAR
,
VARCHAR
,
BLOB
,或
TEXT
列类型。
客户端可以使用多种协议连接到MySQL Server:
客户端可以在任何平台上使用TCP / IP套接字进行连接。
在Windows系统上,如果使用该
--enable-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客户端能够以多种语言编写。 请参见 第28章, 连接器和API 。
Connector / ODBC(MyODBC)接口为使用ODBC(开放式数据库连接)连接的客户端程序提供MySQL支持。 例如,您可以使用MS Access连接到MySQL服务器。 客户端可以在Windows或Unix上运行。 连接器/ ODBC源可用。 与许多其他功能一样,支持所有ODBC 2.5功能。 请参阅 MySQL Connector / 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 Developer Guide 。
服务器可以以多种语言向客户端提供错误消息。 请参见 第10.11节“设置错误消息语言” 。
几个不同的字符集,包括全面支持
latin1
(CP1252) ,
german
,
big5
,
ujis
一些Unicode字符集等。
例如,
表格和列名称中允许
使用斯堪的纳维亚字符
“
å
”
,
“
ä
”
和
“
ö
”
。
所有数据都保存在所选字符集中。
根据默认字符集和排序规则进行排序和比较。 启动MySQL服务器时可以更改此 设置 (请参见 第10.3.2节“服务器字符集和排序” )。 要查看非常高级排序的示例,请查看捷克排序代码。 MySQL Server支持许多可在编译时和运行时指定的不同字符集。
可以动态更改服务器时区,并且各个客户端可以指定自己的时区。 请参见 第5.1.13节“MySQL服务器时区支持” 。
MySQL包括几个客户端和实用程序。 这些包括命令行程序,如 mysqldump 和 mysqladmin ,以及图形程序,如 MySQL Workbench 。
MySQL Server内置支持SQL语句来检查,优化和修复表。
这些语句可以从命令行通过
mysqlcheck
客户端获得。
MySQL还包括
myisamchk
,这是一个非常快速的命令行实用程序,用于在
MyISAM
表
上执行这些操作
。
请参见
第4章,
MySQL程序
。
可以使用
--help
或
-?
选项
调用MySQL程序
以获取在线帮助。
我们最初的目的是使用
mSQL
数据库系统使用我们自己的快速低级(ISAM)例程连接到我们的表。
然而,经过一些测试,我们得出的结论
mSQL
是,对于我们的需求来说
,这个结论
还不够快或不够灵活。
这导致了一个新的SQL接口到我们的数据库,但具有几乎相同的API接口
mSQL
。
此API旨在使用于编写的第三方代码能够
mSQL
轻松移植以便与MySQL一起使用。
MySQL以联合创始人Monty Widenius的女儿My。命名。
MySQL Dolphin(我们的标识)的名称是 “ Sakila ” ,它是从我们的 “ 海豚 名人 ” 比赛 用户建议的大量名单中选出的 。 获奖名称由非洲斯威士兰的开源软件开发商Ambrose Twebaze提交。 根据安布罗斯的说法,女性名字Sakila的根源在于斯威士兰当地语言SiSwati。 Sakila也是坦桑尼亚阿鲁沙一个小镇的名字,靠近Ambrose的原籍乌干达。
本节总结了MySQL 8.0中添加,弃用和删除的内容。 随附部分列出了在MySQL 8.0中添加,弃用或删除的MySQL服务器选项和变量。 请参见 第1.5节“在MySQL 8.0中添加,弃用或删除的服务器和状态变量和选项” 。
MySQL 8.0中添加了以下功能:
数据字典。 MySQL现在包含一个事务数据字典,用于存储有关数据库对象的信息。 在以前的MySQL版本中,字典数据存储在元数据文件和非事务表中。 有关更多信息,请参见 第14章, MySQL数据字典 。
原子数据定义语句(Atomic DDL)。 原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。 有关更多信息,请参见 第13.1.1节“原子数据定义语句支持” 。
升级程序。
以前,在安装新版本的MySQL之后,MySQL服务器会在下次启动时自动升级数据字典表,之后DBA会
手动
调用
mysql_upgrade
来升级
mysql
架构中
的系统表
,以及其他对象。模式,例如
sys
模式和用户模式。
从MySQL 8.0.16开始,服务器执行以前由
mysql_upgrade
处理的任务
。
安装新的MySQL版本后,服务器现在会在下次启动时自动执行所有必要的升级任务,并且不依赖于DBA调用
mysql_upgrade
。
此外,服务器更新帮助表的内容(
mysql_upgrade
没有这样做)。
新的
--upgrade
服务器选项可控制服务器如何执行自动数据字典和服务器升级操作。
有关更多信息,请参见
第2.11.3节“MySQL升级过程升级”
。
安全和帐户管理。 添加了这些增强功能以提高安全性并在帐户管理中实现更高的DBA灵活性:
mysql
系统数据库中
的授权表现在
是
InnoDB
(事务性)表。
以前,这些是
MyISAM
(非交易)表格。
授权表存储引擎的更改是对帐户管理语句行为的伴随变更的基础。
以前,帐户管理声明(例如
CREATE
USER
或
DROP
USER
)命名多个用户可以为某些用户成功而对其他用户失败。
现在,每个语句都是事务性的,并且对所有命名用户都成功或回滚,如果发生任何错误则无效。
如果成功,则将语句写入二进制日志,但如果失败则不写入;
在这种情况下,发生回滚并且不进行任何更改。
有关更多信息,请参见
第13.1.1节“原子数据定义语句支持”
。
可以使用新的
caching_sha2_password
身份验证插件。
与
sha256_password
插件
一样
,
caching_sha2_password
实现SHA-256密码散列,但使用缓存来解决连接时的延迟问题。
它还支持更多连接协议,并且不需要针对基于RSA密钥对的密码交换功能进行OpenSSL链接。
请参见
第6.4.1.3节“缓存SHA-2可插入认证”
。
该
caching_sha2_password
和
sha256_password
认证插件提供比更安全的密码加密
mysql_native_password
插件,并
caching_sha2_password
提供了比更好的性能
sha256_password
。
由于这些优越的安全性和性能特性
caching_sha2_password
,它现在是首选的身份验证插件,而且也是默认的身份验证插件而不是
mysql_native_password
。
有关此默认插件更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息,请参阅
caching_sha2_password作为首选身份验证插件
。
MySQL现在支持角色,这些角色被命名为特权集合。 可以创建和删除角色。 角色可以拥有授予和撤消的权限。 可以向用户帐户授予和撤消角色。 可以从授予帐户的帐户中选择帐户的活动适用角色,并且可以在该帐户的会话期间更改。 有关更多信息,请参见 第6.2.10节“使用角色” 。
MySQL现在结合了用户帐户类别的概念,系统和常规用户根据他们是否拥有
SYSTEM_USER
权限进行
区分
。
请参见
第6.2.11节“帐户类别”
。
以前,除了某些模式之外,无法授予全局适用的权限。
现在,如果
partial_revokes
启用
了
系统变量,则可以执行此操作。
请参见
第6.2.12节“使用部分撤消的权限限制”
。
该
GRANT
语句有一个
子句,指定有关用于语句执行的特权上下文的其他信息。
此语法在SQL级别可见,但其主要目的是通过使这些限制出现在二进制日志中,在部分撤销所强制的所有节点上实现统一复制。
请参见
第13.7.1.6节“GRANT语法”
。
AS
user
[WITH
ROLE]
MySQL现在维护有关密码历史的信息,从而限制了以前密码的重用。 DBA可能要求在某些密码更改或时间段内不从先前的密码中选择新密码。 可以在全局以及每个帐户的基础上建立密码重用策略。
现在可以要求通过指定要替换的当前密码来验证更改帐户密码的尝试。 这使DBA能够阻止用户更改密码,而无需证明他们知道当前密码。 可以在全球范围内以及在每个帐户的基础上建立密码验证策略。
现在允许帐户具有双密码,这使得可以在复杂的多服务器系统中无缝地执行分阶段密码更改,而无需停机。
这些新功能为DBA提供了更完整的密码管理控制。 有关更多信息,请参见 第6.2.15节“密码管理” 。
MySQL现在支持FIPS模式,如果使用OpenSSL编译,并且OpenSSL库和FIPS对象模块在运行时可用。 FIPS模式对加密操作施加了条件,例如对可接受的加密算法的限制或对更长密钥长度的要求。 请参见 第6.5节“FIPS支持” 。
服务器用于新连接的SSL上下文现在可在运行时重新配置。 例如,此功能可能很有用,可以避免重新启动已运行太久以至于其SSL证书已过期的MySQL服务器。 请参阅 加密连接的服务器端运行时配置 。
OpenSSL 1.1.1支持用于加密连接的TLS v1.3协议,如果使用OpenSSL 1.1.1或更高版本编译,MySQL现在也支持TLS v1.3。 请参见 第6.3.6节“加密连接协议和密码” 。
MySQL现在将授予命名管道上的客户端的访问控制设置为在Windows上成功通信所需的最小值。
较新的MySQL客户端软件无需任何其他配置即可打开命名管道连接。
如果无法立即升级较旧的客户端软件,
named_pipe_full_access_group
则可以使用
新的
服务器系统变量为Windows组提供打开命名管道连接所需的权限。
完全访问组的成员资格应该受到限制并且是临时的。
资源管理。 MySQL现在支持资源组的创建和管理,并允许将服务器内运行的线程分配给特定组,以便线程根据组可用的资源执行。 组属性可以控制其资源,以启用或限制组中线程的资源消耗。 DBA可以根据不同的工作负载修改这些属性。 目前,CPU时间是一个可管理的资源,以 “ 虚拟CPU ” 的概念为代表 作为包含CPU核心,超线程,硬件线程等的术语。 服务器在启动时确定可用的虚拟CPU数量,具有适当权限的数据库管理员可以将这些CPU与资源组关联,并将线程分配给组。 有关更多信息,请参见 第8.12.5节“资源组” 。
表加密管理。
现在可以通过定义和实施加密默认值来全局管理表加密。
该
default_table_encryption
变量为新创建的模式和常规表空间定义加密默认值。
DEFAULT
ENCRYPTION
在创建模式时,
也可以使用
子句
定义模式的加密缺省值
。
默认情况下,表继承对其创建的模式或常规表空间的加密。通过启用加密默认值来强制执行
table_encryption_privilege_check
变量。
在创建或更改加密设置与设置不同的模式或常规表空间
default_table_encryption
时,或者在创建或更改加密设置与默认模式加密不同的表时,
会发生权限检查
。
启用后,
该
TABLE_ENCRYPTION_ADMIN
权限允许覆盖默认加密设置
table_encryption_privilege_check
。
有关更多信息,请参阅
为架构和常规表空间定义加密默认值
。
InnoDB增强功能。
增加了这些
InnoDB
增强功能:
每次值更改时,当前最大自动增量计数器值将写入重做日志,并保存到每个检查点上的引擎专用系统表中。 这些更改使当前最大自动增量计数器值在服务器重新启动时保持不变。 另外:
有关更多信息,请参见 第15.6.1.4节“InnoDB中的AUTO_INCREMENT处理” 和 InnoDB AUTO_INCREMENT计数器初始化 。
遇到索引树损坏时,
InnoDB
将损坏标志写入重做日志,这会使损坏标志崩溃安全。
InnoDB
还将内存中损坏标志数据写入每个检查点上的引擎专用系统表。
在恢复期间,
InnoDB
从两个位置读取损坏标志并在将内存表和索引对象标记为损坏之前合并结果。
的
InnoDB
分布式缓存
插件支持多个
get
操作(读取在一个单一的多键-值对
分布式缓存
查询)和范围查询。
请参见
第15.19.4节“InnoDB memcached多个获取和范围查询支持”
。
新的动态变量
innodb_deadlock_detect
可用于禁用死锁检测。
在高并发系统上,当许多线程等待同一个锁时,死锁检测会导致速度减慢。
有时,禁用死锁检测可能更有效,并且在
innodb_lock_wait_timeout
发生死锁时
依赖于
事务回滚
的
设置。
新
INFORMATION_SCHEMA.INNODB_CACHED_INDEXES
表报告
InnoDB
每个索引缓冲池中
缓存的索引页数
。
InnoDB
现在,在共享临时表空间中创建临时表
ibtmp1
。
InnoDB
支持
NOWAIT
和
SKIP
LOCKED
选项
SELECT ... FOR
SHARE
以及
SELECT ... FOR
UPDATE
锁定读取语句。
NOWAIT
如果请求的行被另一个事务锁定,则会导致语句立即返回。
SKIP LOCKED
从结果集中删除锁定的行。
请参阅
使用NOWAIT和SKIP LOCKED锁定读取并发
。
SELECT ... FOR SHARE
替换
SELECT ... LOCK IN SHARE MODE
,但
LOCK IN SHARE MODE
仍可用于向后兼容。
这些陈述是等同的。
然而,
FOR UPDATE
和
FOR SHARE
支持
NOWAIT
,
SKIP
LOCKED
和
选项。
请参见
第13.2.10节“SELECT语法”
。
OF
tbl_name
OF
将锁定查询应用于命名表。
tbl_name
ADD PARTITION
,
DROP
PARTITION
,
COALESCE
PARTITION
,
REORGANIZE
PARTITION
,和
REBUILD
PARTITION
ALTER
TABLE
选项由本地分区就地API的支持,可能与使用
ALGORITHM={COPY|INPLACE}
和
LOCK
条款。
DROP PARTITION
与
ALGORITHM=INPLACE
存储在该分区删除数据并丢弃分区。
但是,
DROP PARTITION
使用
ALGORITHM=COPY
或
old_alter_table=ON
重建分区表并尝试将数据从已删除的分区移动到具有兼容
PARTITION ... VALUES
定义的
另一个分区
。
将删除无法移动到其他分区的数据。
该
InnoDB
存储引擎现在使用MySQL的数据字典,而不是它自己的存储引擎特定的数据字典。
有关数据字典的信息,请参阅
第14章,
MySQL数据字典
。
mysql
系统表和数据字典表现
在在MySQL数据目录中
InnoDB
命名
的单个
表空间文件中
创建
mysql.ibd
。
以前,这些表是
InnoDB
在
mysql
数据库目录
中的各个
表空间文件中
创建的
。
MySQL 8.0中引入了以下撤消表空间更改:
缺省情况下,undo logs现在驻留在MySQL实例初始化时创建的两个undo表空间中。 系统表空间中不再创建撤消日志。
从MySQL 8.0.14开始,可以使用
CREATE
UNDO TABLESPACE
语法
在运行时在选定的位置创建其他撤消表空间
。
创建UNDO TABLESPACEtablespace_name
添加数据文件'file_name
.ibu';
CREATE
UNDO TABLESPACE
可以
使用
语法在运行时删除
使用
语法
创建的撤消表空间
DROP
UNDO TABLESPACE
。
DROP UNDO TABLESPACE tablespace_name
;
ALTER
UNDO TABLESPACE
语法可用于将撤消表空间标记为活动或非活动。
ALTER UNDO TABLESPACE tablespace_name
SET {ACTIVE | INACTIVE};
甲
STATE
,显示了表空间的状态列被添加到
INFORMATION_SCHEMA.INNODB_TABLESPACES
表中。
撤消表空间必须处于
empty
可以删除之前
的
状态。
innodb_undo_log_truncate
默认情况下启用
该
变量。
该
innodb_rollback_segments
变量定义每个撤消表空间的回滚段数。
以前,
innodb_rollback_segments
指定了MySQL实例的回滚段总数。
此更改会增加可用于并发事务的回滚段数。
更多回滚段增加了并发事务使用单独的回滚段进行撤消日志的可能性,从而减少了资源争用。
影响缓冲池预冲洗和刷新行为的变量的默认值已修改:
该
innodb_max_dirty_pages_pct_lwm
默认值现在是10。0先前的默认值禁用缓冲池预冲洗。
当缓冲池中脏页的百分比超过10%时,值10将启用预刷。
启用预冲洗可提高性能一致性。
将
innodb_max_dirty_pages_pct
默认值从75到90。增加
InnoDB
尝试从缓冲池刷新数据,使脏页的百分比不超过这个值。
增加的默认值允许缓冲池中较大百分比的脏页。
默认
innodb_autoinc_lock_mode
设置现在为2(交错)。
交错锁定模式允许并行执行多行插入,从而提高了并发性和可伸缩性。
新的
innodb_autoinc_lock_mode
默认设置反映了从基于语句的复制到基于行的复制的更改,作为MySQL 5.7中的默认复制类型。
基于语句的复制需要连续的自动增量锁定模式(以前的默认值),以确保为给定的SQL语句序列以可预测和可重复的顺序分配自动增量值,而基于行的复制对于SQL语句的执行顺序。
有关更多信息,请参阅
InnoDB AUTO_INCREMENT锁定模式
。
对于使用基于语句的复制的系统,新的
innodb_autoinc_lock_mode
默认设置可能会破坏依赖于顺序自动增量值的应用程序。
要恢复以前的默认值,请设置
innodb_autoinc_lock_mode
为1。
ALTER
TABLESPACE ... RENAME TO
语法
支持重命名通用表空间
。
innodb_dedicated_server
默认情况下禁用
的新
变量可用于
InnoDB
根据服务器上检测到的内存量自动配置以下选项:
此选项适用于在专用服务器上运行的MySQL服务器实例。 有关更多信息,请参见 第15.8.12节“为专用MySQL服务器启用自动配置” 。
新
INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF
视图为表空间提供空间,名称,路径,标志和空间类型数据
InnoDB
。
与MySQL捆绑在一起 的 zlib库 版本从1.2.3版本升级到版本1.2.11。 MySQL在zlib库的帮助下实现压缩。
如果使用
InnoDB
压缩表,请参见
第2.11.4节“MySQL 8.0中的更改”
以了解相关的升级含义。
序列化字典信息(SDI)存在于
InnoDB
除全局临时表空间和撤消表空间文件之外的
所有
表空间文件中。
SDI是表和表空间对象的序列化元数据。
SDI数据的存在提供了元数据冗余。
例如,如果数据字典变得不可用,则可以从表空间文件中提取字典对象元数据。
使用
ibd2sdi
工具
执行SDI提取
。
SDI数据以
JSON
格式
存储
。
在表空间文件中包含SDI数据会增加表空间文件的大小。 SDI记录需要单个索引页面,默认情况下大小为16KB。 但是,SDI数据在存储时会进行压缩,以减少存储空间。
该
InnoDB
存储引擎现在支持原子DDL,这保证了DDL操作要么完全提交或回滚,即使服务器在操作时停止。
有关更多信息,请参见
第13.1.1节“原子数据定义语句支持”
。
使用该
innodb_directories
选项
在服务器脱机时,可以将表空间文件移动或还原到新位置
。
有关更多信息,请参见
第15.6.3.8节“在服务器脱机时移动表空间文件”
。
实施了以下重做日志记录优化:
用户线程现在可以并发写入日志缓冲区而无需同步写入。
用户线程现在可以轻松的顺序将脏页添加到刷新列表中。
专用日志线程现在负责将日志缓冲区写入系统缓冲区,将系统缓冲区刷新到磁盘,通知用户线程有关写入和刷新的重做,维护宽松刷新列表顺序所需的延迟以及写入检查点。
添加了系统变量,用于配置等待刷新重做的用户线程使用旋转延迟:
innodb_log_wait_for_flush_spin_hwm
:定义最大平均日志刷新时间,超过该时间,用户线程在等待刷新的重做时不再旋转。
innodb_log_spin_cpu_abs_lwm
:定义在等待刷新重做时用户线程不再旋转的最小CPU使用量。
innodb_log_spin_cpu_pct_hwm
:定义在等待刷新的重做时用户线程不再旋转的最大CPU使用量。
该
innodb_log_buffer_size
变量现在是动态的,允许在服务器运行时调整日志缓冲区的大小。
有关更多信息,请参见 第8.5.4节“优化InnoDB重做日志记录” 。
从MySQL 8.0.12开始,对大对象(LOB)数据的小更新支持撤消日志记录,这样可以提高大小为100字节或更小的LOB更新的性能。 以前,LOB更新的大小至少为一个LOB页面,对于可能只修改几个字节的更新而言,这不是最佳选择。 此增强功能建立在MySQL 8.0.4中为LOB数据的部分更新添加的支持的基础上。
从MySQL 8.0.12开始,
ALGORITHM=INSTANT
支持以下
ALTER
TABLE
操作:
添加列。
此功能也称为
“
即时
ADD
COLUMN
”
。
限制适用。
请参见
第15.12.1节“在线DDL操作”
。
添加或删除虚拟列。
添加或删除列默认值。
更改索引类型。
重命名表格。
ALGORITHM=INSTANT
仅
支持
修改数据字典中的元数据的操作。
表中没有元数据锁,表数据不受影响,使操作瞬间完成。
如果未明确指定,
ALGORITHM=INSTANT
则默认情况下由支持它的操作使用。
如果
ALGORITHM=INSTANT
已指定但不受支持,则操作会立即失败并显示错误。
有关支持的操作的更多信息
ALGORITHM=INSTANT
,请参见
第15.12.1节“在线DDL操作”
。
从MySQL 8.0.13开始,
TempTable
存储引擎支持二进制大对象(BLOB)类型列的存储。
此增强功能可提高使用包含BLOB数据的临时表的查询的性能。
以前,包含BLOB数据的临时表存储在由...定义的磁盘存储引擎中
internal_tmp_disk_storage_engine
。
有关更多信息,请参见
第8.4.4节“MySQL中的内部临时表使用”
。
从MySQL 8.0.13开始,静态
InnoDB
数据加密功能支持通用表空间。
以前,只能对每个表的文件表空间进行加密。
为了支持一般的表空间的加密,
CREATE
TABLESPACE
以及
ALTER
TABLESPACE
语法扩展到包括
ENCRYPTION
条款。
该
INFORMATION_SCHEMA.INNODB_TABLESPACES
表现在包含一个
ENCRYPTION
列,指示表空间是否已加密。
在
stage/innodb/alter tablespace
(encryption)
加入绩效模式阶段仪器允许普通表空间加密操作的监控。
innodb_buffer_pool_in_core_file
通过排除
InnoDB
缓冲池页面来
禁用该
变量可以减小核心文件的大小
。
要使用此变量,
core_file
必须启用
该变量,
并且操作系统必须支持
MADV_DONTDUMP
非POSIX扩展
madvise()
,Linux 3.4及更高版本
支持该
扩展
。
有关更多信息,请参见
第15.8.3.8节“从核心文件中排除缓冲池页面”
。
从MySQL 8.0.13开始,由优化器创建的用户创建的临时表和内部临时表存储在会话临时表空间中,这些表空间从临时表空间池分配给会话。
会话断开连接时,其临时表空间将被截断并释放回池中。
在以前的版本中,临时表是在全局临时表空间(
ibtmp1
)
中创建的,在
删除临时表后,它不会将磁盘空间返回给操作系统。
该
innodb_temp_tablespaces_dir
变量定义创建会话临时表空间的位置。
默认位置是
#innodb_temp
数据目录中的目录。
该
INNODB_SESSION_TEMP_TABLESPACES
表提供有关会话临时表空间的元数据。
全局临时表空间(
ibtmp1
)现在存储用于对用户创建的临时表所做更改的回滚段。
从MySQL 8.0.14开始,
InnoDB
支持并行聚簇索引读取,这可以提高
CHECK
TABLE
性能。
此功能不适用于二级索引扫描。
的
innodb_parallel_read_threads
会话变量必须被设置为一个大于1的值用于并行聚簇索引读取发生。
默认值为4.用于执行并行聚簇索引读取的实际线程
innodb_parallel_read_threads
数由要扫描的索引子树
的
设置或数量决定,取较小者。
从8.0.14开始,当
innodb_dedicated_server
启用变量
时
,将根据自动配置的缓冲池大小配置日志文件的大小和数量。
以前,根据服务器上检测到的内存量配置日志文件大小,并且未自动配置日志文件的数量。
从8.0.14开始,该
语句
的
ADD DATAFILE
子句
CREATE TABLESPACE
是可选的,它允许没有
FILE
权限的
用户
创建表空间。
在
CREATE
TABLESPACE
没有
ADD DATAFILE
子句的
情况下执行的
语句会隐式创建具有唯一文件名的表空间数据文件。
默认情况下,当TempTable存储引擎占用的内存量超过
temptable_max_ram
变量
定义的内存限制时
,TempTable存储引擎开始从磁盘分配内存映射的临时文件。
从MySQL 8.0.16开始,此行为由
temptable_use_mmap
变量
控制
。
禁用
temptable_use_mmap
会导致TempTable存储引擎使用
InnoDB
磁盘内部临时表而不是内存映射文件作为其溢出机制。
有关更多信息,请参阅
内部临时表存储引擎
。
从MySQL 8.0.16开始,静态
InnoDB
数据加密功能支持加密
mysql
系统表空间。
该
mysql
系统表空间包含
mysql
系统数据库和MySQL数据字典表。
有关更多信息,请参见
第15.6.3.9节“InnoDB静态数据加密”
。
innodb_spin_wait_pause_multiplier
MySQL 8.0.16中引入
的
变量可以更好地控制线程等待获取互斥锁或rw-lock时发生的自旋锁定轮询延迟的持续时间。
可以更精细地调整延迟,以解决不同处理器体系结构上PAUSE指令持续时间的差异。
有关更多信息,请参见
第15.8.8节“配置自旋锁轮询”
。
字符集支持。
默认字符集已从更改
latin1
为
utf8mb4
。
该
utf8mb4
字符集有几个新的排序规则,包括
utf8mb4_ja_0900_as_cs
MySQL中可用于Unicode的第一个日语特定排序规则。
有关更多信息,请参见
第10.10.1节“Unicode字符集”
。
JSON增强功能。 对MySQL的JSON功能进行了以下增强或添加:
添加了
->>
(内联路径)运算符,相当于调用
JSON_UNQUOTE()
结果
JSON_EXTRACT()
。
这是
->
MySQL 5.7中引入
的列路径运算符的改进
;
col->>"$.path"
相当于
JSON_UNQUOTE(col->"$.path")
。
内联路径运算符可以用来随时随地可以使用
JSON_UNQUOTE(JSON_EXTRACT())
,如
SELECT
列清单,
WHERE
和
HAVING
条款,并
ORDER BY
和
GROUP BY
条款。
有关更多信息,请参阅运算符的说明以及
JSON路径语法
。
添加了两个JSON聚合函数
JSON_ARRAYAGG()
和
JSON_OBJECTAGG()
。
JSON_ARRAYAGG()
将列或表达式作为其参数,并将结果聚合为单个
JSON
数组。
表达式可以评估任何MySQL数据类型;
这不一定是一个
JSON
价值。
JSON_OBJECTAGG()
采用两个列或表达式,它将其解释为键和值;
它将结果作为单个
JSON
对象
返回
。
有关更多信息和示例,请参见
第12.20节“聚合(GROUP BY)函数”
。
添加了JSON实用程序功能
JSON_PRETTY()
,
JSON
以易于阅读的格式
输出现有
值;
每个JSON对象成员或数组值都打印在一个单独的行上,子对象或数组相对于其父对象是2个空格。
此函数也适用于可以解析为JSON值的字符串。
有关更多详细信息和示例,请参见 第12.17.8节“JSON实用程序函数” 。
JSON
在使用查询
对
值进行
排序时
ORDER BY
,每个值现在由排序键的可变长度部分表示,而不是固定1K大小的一部分。
在许多情况下,这可以减少过度使用。
例如,标量
INT
或偶
BIGINT
数值实际上只需要很少的字节,因此通过填充占用了该空间的剩余部分(最多90%或更多)。
此更改对性能具有以下好处:
现在可以更有效地使用排序缓冲区空间,因此filesorts不需要尽早或通常使用固定长度排序键刷新到磁盘。 这意味着可以在内存中分类更多数据,从而避免不必要的磁盘访问。
较短的密钥可以比较长的密钥更快地进行比较,从而显着提高性能。 对于完全在内存中执行的排序以及需要写入和读取磁盘的排序,都是如此。
在MySQL 8.0.2中添加了对
JSON
列值的
部分,就地更新的支持
,这比完全删除现有JSON值并在其位置编写新值更有效,就像之前更新任何
JSON
列
时所做的那样
。
要应用这种优化,更新,必须使用应用
JSON_SET()
,
JSON_REPLACE()
或
JSON_REMOVE()
。
无法将新元素添加到正在更新的JSON文档中;
文档中的值不会占用比更新前更多的空间。
请参阅
JSON值的部分更新
,详细讨论要求。
可以将JSON文档的部分更新写入二进制日志,占用的空间比记录完整的JSON文档少。
在使用基于语句的复制时,始终会记录部分更新。
要使其与基于行的复制一起使用,必须先设置
binlog_row_value_options=PARTIAL_JSON
;
有关更多信息,请参阅此变量的说明。
添加了JSON实用程序函数
JSON_STORAGE_SIZE()
和
JSON_STORAGE_FREE()
。
JSON_STORAGE_SIZE()
在任何部分更新之前,返回用于JSON文档的二进制表示的字节存储空间(请参阅上一项)。
JSON_STORAGE_FREE()
显示
JSON
使用
JSON_SET()
或
部分更新后
的表格列中剩余的空间量
JSON_REPLACE()
;
如果新值的二进制表示小于先前值的二进制表示,则大于零。
这些函数中的每一个也接受JSON文档的有效字符串表示。
对于这样的值,
JSON_STORAGE_SIZE()
返回其转换为JSON文档后其二进制表示所使用的空间。
对于包含JSON文档的字符串表示形式的变量,
JSON_STORAGE_FREE()
返回零。
如果无法将其(非null)参数解析为有效的JSON文档,并且
NULL
参数为
,
则
任一函数都会产生错误
NULL
。
有关更多信息和示例,请参见 第12.17.8节“JSON实用程序函数” 。
JSON_STORAGE_SIZE()
并
JSON_STORAGE_FREE()
在MySQL 8.0.2中实现。
在MySQL 8.0.2中添加了对
$[1 to 5]
XPath表达式
等范围的支持
。
此版本还为
last
关键字和相对寻址
添加了支持
,以便
$[last]
始终选择数组中的最后一个(编号最大的)元素和
$[last-1]
倒数第二个元素。
last
和使用它的表达式也可以包含在范围定义中。
例如,
$[last-2 to last-1]
返回最后两个元素,但返回一个数组。
有关
其他信息和示例,
请参阅
搜索和修改JSON值
。
添加了旨在符合
RFC 7396
的JSON合并功能
。
JSON_MERGE_PATCH()
,当在2个JSON对象上使用时,将它们合并为单个JSON对象,该对象具有以下集合的成员作为成员:
第一个对象的每个成员,在第二个对象中没有成员具有相同的键。
第二个对象的每个成员,其中没有成员在第一个对象中具有相同的键,并且其值不是JSON
null
文字。
每个成员都有一个存在于两个对象中的键,并且其第二个对象中的值不是JSON
null
文字。
作为此工作的一部分,该
JSON_MERGE()
功能已重命名
JSON_MERGE_PRESERVE()
。
JSON_MERGE()
继续被认为是
JSON_MERGE_PRESERVE()
MySQL 8.0中
的别名
,但现在已被弃用,并且将在未来版本的MySQL中删除。
有关更多信息和示例,请参见 第12.17.4节“修改JSON值的函数” 。
实现了
“
最后重复密钥获胜
”
重复密钥的规范化,与
RFC 7159
和大多数JavaScript解析器一致。
此处显示了此行为的示例,其中仅
x
保留
具有密钥的最右侧成员
:
mysql> SELECTJSON_OBJECT('x', '32', 'y', '[true, false]',
>'x', '"abc"', 'x', '100') AS Result;
+ ------------------------------------ + | 结果| + ------------------------------------ + | {“x”:“100”,“y”:“[true,false]”} | + ------------------------------------ + 1排(0.00秒)
插入到MySQL
JSON
列中的
值
也以这种方式标准化,如下例所示:
MySQL的>CREATE TABLE t1 (c1 JSON);
MySQL的>INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}');
MySQL的>SELECT c1 FROM t1;
+ ------------------ + | c1 | + ------------------ + | {“x”:[3,5,7]} | + ------------------ +
这是与先前版本的MySQL不兼容的变化, 在这种情况下使用 “ 第一次重复密钥获胜 ” 算法。
有关 更多信息和示例 , 请参阅 JSON值的规范化,合并和自动包装 。
JSON_TABLE()
在MySQL 8.0.4中
添加了该
功能。
此函数接受JSON数据并将其作为具有指定列的关系表返回。
此函数具有语法
,其中
是返回JSON数据的表达式,
是应用于源的JSON路径,
是列定义的列表。
这里显示了一个例子:
JSON_TABLE(
expr
,
path
COLUMNS
column_list
) [AS]
alias
)expr
path
column_list
mysql>SELECT *
- >FROM
- >JSON_TABLE(
- >'[{"a":3,"b":"0"},{"a":"3","b":"1"},{"a":2,"b":1},{"a":0},{"b":[1,2]}]',
- >"$[*]" COLUMNS(
- >rowid FOR ORDINALITY,
- > - >xa INT EXISTS PATH "$.a",
- >xb INT EXISTS PATH "$.b",
- > - >sa VARCHAR(100) PATH "$.a",
- >sb VARCHAR(100) PATH "$.b",
- > - >ja JSON PATH "$.a",
- >jb JSON PATH "$.b"
- >)
- >) AS jt1;
+ ------- + ------ + ------ + ------ + ------ + ------ + ------ - + | rowid | xa | xb | sa | 某人| ja | jb | + ------- + ------ + ------ + ------ + ------ + ------ + ------ - + | 1 | 1 | 1 | 3 | 0 | 3 | “0”| | 2 | 1 | 1 | 3 | 1 | “3”| “1”| | 3 | 1 | 1 | 2 | 1 | 2 | 1 | | 4 | 1 | 0 | 0 | NULL | 0 | NULL | | 5 | 0 | 1 | NULL | NULL | NULL | [1,2] | + ------- + ------ + ------ + ------ + ------ + ------ + ------ - +
JSON源表达式可以是生成有效JSON文档的任何表达式,包括JSON文字,表列或返回JSON的函数调用,如
JSON_EXTRACT(t1,
data,
'$.post.comments')
。
有关更多信息,请参见
第12.17.6节“JSON表函数”
。
数据类型支持。
MySQL现在支持将表达式用作数据类型规范中的默认值。
这包括使用表达式作为默认值
BLOB
,
TEXT
,
GEOMETRY
,和
JSON
数据类型,这在以前是根本不会被分配缺省值。
有关详细信息,请参见
第11.7节“数据类型默认值”
。
优化。 添加了以下优化程序增强功能:
MySQL现在支持隐形索引。 优化器根本不使用不可见索引,但以其他方式正常维护。 默认情况下,索引是可见的。 不可见索引可以测试删除索引对查询性能的影响,而不会进行破坏性更改,如果索引需要,则必须撤消。 请参见 第8.3.12节“不可见索引” 。
MySQL现在支持降序索引:
DESC
在索引定义中不再被忽略,但会导致按键降序存储键值。
以前,索引可能会以相反的顺序扫描,但性能会受到影响。
可以按正向顺序扫描降序索引,这样更有效。
当最有效的扫描顺序混合某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。
请参见
第8.3.13节“降序索引”
。
MySQL现在支持创建索引表达式值而不是列值的功能索引键部分。
功能键部件支持索引无法索引的值,例如
JSON
值。
有关详细信息,请参见
第13.1.15节“CREATE INDEX语法”
。
在MySQL 8.0.14及更高版本中,
WHERE
由常量文字表达式引起的
微不足道的
条件在准备期间被删除,而不是在优化期间被删除。
在过程的早期删除条件使得可以简化具有微不足道条件的外连接的查询的连接,例如:
SELECT * FROM t1 LEFT JOIN t2 ONcondition_1
WHEREcondition_2
OR 0 = 1
优化器现在在准备期间看到0 = 1始终为false,使得
OR 0 = 1
冗余,并将其删除,留下:
SELECT * FROM t1 LEFT JOIN t2 ONcondition_1
在哪里condition_2
现在,优化器可以将查询重写为内部联接,如下所示:
SELECT * FROM t1 LEFT JOIN t2 WHEREcondition_1
ANDcondition_2
有关更多信息,请参见 第8.2.1.8节“外部连接优化” 。
在MySQL 8.0.16及更高版本中,MySQL可以在优化时使用常量折叠来处理列和常量值之间的比较,其中常量超出范围或相对于列的类型在范围边界上,而不是所以对于执行时的每一行。
例如,给定一个表
t
与
TINYINT
UNSIGNED
列
c
,优化器可以改写的条件如
WHERE
c < 256
对
WHERE 1
(和远离共优化条件),或
WHERE c >= 255
到
WHERE c
= 255
。
有关 更多信息 , 请参见 第8.2.1.13节“常量折叠优化” 。
从MySQL 8.0.16开始,用于
IN
子查询
的半连接优化
现在也可以应用于
EXISTS
子查询。
此外,优化器现在在
WHERE
附加到子查询
的
条件
中对与之相关的等式谓词进行去相关
,以便可以像处理
IN
子查询中的
表达式一样对待它们
。
这适用于两个
EXISTS
和
IN
子查询。
有关更多信息,请参见 第8.2.2.1节“使用半连接转换优化子查询,派生表,视图引用和公用表表达式” 。
公用表表达式。
MySQL现在支持非递归和递归的公用表表达式。
公用表表达式允许使用命名的临时结果集,通过允许
WITH
语句之前
的
子句
SELECT
和某些其他语句来实现。
有关更多信息,请参见
第13.2.13节“WITH语法(公用表表达式)”
。
窗口功能。
MySQL现在支持窗口函数,对于查询中的每一行,它使用与该行相关的行执行计算。
这些包括诸如
RANK()
,
LAG()
,和
NTILE()
。
此外,现在可以将几个现有的聚合函数用作窗口函数(例如,
SUM()
和
AVG()
)。
有关更多信息,请参见
第12.21节“窗口函数”
。
横向派生表。
现在,派生表可以在
LATERAL
关键字
前面
指定允许在同一
FROM
子句中
引用(依赖于)前面表的列
。
横向派生表使得某些SQL操作成为可能,这些操作无法使用非边缘派生表或需要效率较低的变通方法。
请参见
第13.2.11.9节“横向派生表”
。
单表DELETE语句中的别名。
在MySQL 8.0.16及更高版本中,单表
DELETE
语句支持使用表别名。
正则表达式支持。
以前,MySQL使用Henry Spencer正则表达式库来支持正则表达式运算符(
REGEXP
,
RLIKE
)。
正则表达式支持已使用国际Unicode组件(ICU)重新实现,它提供完整的Unicode支持并且是多字节安全的。
该
REGEXP_LIKE()
函数以
REGEXP
和
RLIKE
运算符
的方式执行正则表达式匹配,这些
运算符现在是该函数的同义词。
此外,
REGEXP_INSTR()
,
REGEXP_REPLACE()
,和
REGEXP_SUBSTR()
函数可用于查找匹配位置并分别执行子串替换和提取。
该
regexp_stack_limit
和
regexp_time_limit
系统变量提供了通过发动机匹配的资源消耗的控制。
有关更多信息,请参见
第12.5.2节“正则表达式”
。
有关使用正则表达式的应用程序可能受实现更改影响的方式的信息,请参阅
正则表达式兼容性注意事项
。
内部临时表。
的
TempTable
存储引擎替换
MEMORY
存储引擎作为默认发动机用于在内存中的内部临时表。
该
TempTable
存储引擎提供了有效的存储
VARCHAR
和
VARBINARY
列。
的
internal_tmp_mem_storage_engine
会话变量定义了用于在存储器内的临时表的存储引擎。
允许的值是
TempTable
(默认值)和
MEMORY
。
该
temptable_max_ram
变量定义了
TempTable
存储引擎在将数据存储到磁盘之前可以使用
的最大内存量
。
日志记录。
重写错误日志记录以使用MySQL组件体系结构。
传统错误日志记录使用内置组件实现,使用系统日志进行日志记录实现为可加载组件。
此外,还提供可加载的JSON日志写入程序。
要控制要启用的日志组件,请使用
log_error_services
系统变量。
有关更多信息,请参见
第5.4.2节“错误日志”
。
备份锁。
新类型的备份锁在联机备份期间允许DML,同时防止可能导致快照不一致的操作。
新的备份锁由
LOCK INSTANCE FOR BACKUP
和
UNLOCK
INSTANCE
语法
支持
。
该
BACKUP_ADMIN
权限才能使用这些语句。
复制。 对MySQL Replication进行了以下增强:
MySQL Replication现在支持使用紧凑的二进制格式对JSON文档的部分更新进行二进制日志记录,从而节省了日志记录完整JSON文档的空间。
当使用基于语句的日志记录时,这种紧凑日志记录会自动完成,并且可以通过将新
binlog_row_value_options
系统变量
设置为来启用
PARTIAL_JSON
。
有关更多信息,请参阅
JSON值的部分更新
以及
binlog_row_value_options
。
连接管理。
MySQL服务器现在允许专门为管理连接配置TCP / IP端口。
这提供了用于普通连接的网络接口上允许的单个管理连接的替代方案,即使
max_connections
已建立连接也是如此。
请参见
第8.12.4.1节“MySQL如何处理客户端连接”
。
组态。
MySQL中主机名的最大允许长度已增加到255个ASCII字符,高于之前的60个字符的限制。
例如,这适用于数据字典中的主机名相关列,
mysql
系统架构,性能架构
INFORMATION_SCHEMA
和
sys
架构;
声明
的
MASTER_HOST
价值
CHANGE
MASTER TO
;
语句输出中
的
Host
列
SHOW PROCESSLIST
;
帐户名中的主机名(例如在帐户管理语句和帐户中使用)
DEFINER
属性);
和主机名相关的命令选项和系统变量。
注意事项:
允许的主机名长度的增加可能会影响主机名列上具有索引的表。
例如,
mysql
系统架构中索引主机名的表现在具有显式
ROW_FORMAT
属性,
DYNAMIC
以容纳更长的索引值。
可以基于服务器主机名构造一些文件名值配置设置。
允许的值受底层操作系统的约束,这可能不允许文件名长到足以包含255个字符的主机名。
这会影响到
general_log_file
,
log_error
,
pid_file
,
relay_log
,和
slow_query_log_file
系统变量和相应的选项。
如果操作系统的基于主机名的值太长,则必须提供明确的较短值。
尽管服务器现在支持255个字符的主机名,但使用该
--ssl-mode=VERIFY_IDENTITY
选项
建立的服务器的连
接受OpenSSL支持的最大主机名长度的限制。
主机名匹配属于两个SSL证书字段,其最大长度如下:公共名称:最大长度64;
主题备选名称:根据RFC#1034的最大长度。
插件。 以前,MySQL插件可以用C或C ++编写。 插件使用的MySQL头文件现在包含C ++代码,这意味着插件必须用C ++编写,而不是C语言。
C API。 MySQL C API现在支持用于与MySQL服务器进行非阻塞通信的异步函数。 每个函数都是现有同步函数的异步函数。 如果对服务器连接的读取或写入必须等待,则同步功能将阻塞。 异步功能使应用程序能够检查服务器连接上的工作是否准备好继续。 如果没有,应用程序可以执行其他工作,然后再次检查。 请参见 第28.7.12节“C API异步接口” 。
演员的其他目标类型。
功能
CAST()
和
CONVERT()
现在支持转换到类型
DOUBLE
,
FLOAT
和
REAL
。
在MySQL 8.0.17中添加。
请参见
第12.10节“强制转换函数和运算符”
。
JSON模式验证。
MySQL 8.0.17添加了两个函数
JSON_SCHEMA_VALID()
,
JSON_SCHEMA_VALIDATION_REPORT()
用于再次验证JSON文档的JSON模式。
JSON_SCHEMA_VALID()
如果文档针对模式进行验证,则返回TRUE(1);如果不是,则返回FALSE(0)。
JSON_SCHEMA_VALIDATION_REPORT()
返回一个JSON文档,其中包含有关验证结果的详细信息。
以下陈述适用于这两个功能:
架构必须符合JSON Schema规范的草案4。
required
支持属性。
$ref
不支持
外部资源和
关键字。
支持正则表达式模式; 无效模式会被忽略。
有关 更多信息和示例, 请参见 第12.17.7节“JSON模式验证函数” 。
JSON_OVERLAPS()和成员()。
MySQL 8.0还提供了用于获取有关JSON文档内容的信息的附加功能。
该
JSON_OVERLAPS()
函数比较两个JSON对象或数组,如果它们包含任何共同的键值对或数组元素,则返回true(1),如果不包含,则返回false(0)。
的
MEMBER OF()
运算符返回真(1)如果给定的值存在作为指定数组的一个元素,假(0),如果它没有。
这两个都可以在MySQL 8.0.17及更高版本中使用。
有关更多信息和示例,请参见
第12.17.3节“搜索JSON值的函数”
。
hintable time_zone。
从MySQL 8.0.17开始,
time_zone
会话变量是可以使用的
SET_VAR
。
MySQL 8.0中不推荐使用以下功能,可能会在将来的系列中删除。 在显示替代方案的地方,应更新应用程序以使用它们。
对于使用MySQL 8.0中已弃用的功能的应用程序,这些功能已在较高的MySQL系列中删除,从MySQL 8.0主服务器复制到更高级别的从服务器时语句可能会失败,或者可能对主服务器和从服务器产生不同的影响。 为避免此类问题,应修改使用8.0中不推荐使用的功能的应用程序,以避免它们并尽可能使用替代方案。
utf8mb3
不推荐使用
该
字符集。
请
utf8mb4
改用。
因为它
caching_sha2_password
是MySQL 8.0中的默认身份验证插件并提供了
sha256_password
身份验证插件
功能的超集
,
sha256_password
所以不推荐使用,并且将在未来的MySQL版本中删除。
sha256_password
应该迁移使用
身份验证的MySQL帐户
以使用
caching_sha2_password
。
该
validate_password
插件已重新实现以使用服务器组件基础结构。
插件形式
validate_password
仍然可用,但已弃用,将在未来的MySQL版本中删除。
使用该插件的MySQL安装应该转换为使用该组件。
请参见
第6.4.3.3节“转换到密码验证组件”
。
该
ALTER
TABLESPACE
和
条款已被弃用。
DROP
TABLESPACE
ENGINE
在
PAD_CHAR_TO_FULL_LENGTH
SQL模式已经过时了。
AUTO_INCREMENT
对于类型
FLOAT
和
DOUBLE
(以及任何同义词)的
列,不建议使用支持
。
考虑
AUTO_INCREMENT
从这些列中
删除
属性,或将它们转换为整数类型。
的
UNSIGNED
属性被弃用类型的列
FLOAT
,
DOUBLE
和
DECIMAL
(和任何同义词)。
考虑使用简单
CHECK
约束代替此类列。
FLOAT(
和
指定类型列
和
(和任何同义词)
列的位数的语法
是非标准的MySQL扩展。
不推荐使用此语法。
M
,D
)DOUBLE(
M
,D
)FLOAT
DOUBLE
的
ZEROFILL
属性是不鼓励数值数据类型,如对于整数数据类型的显示宽度属性。
考虑使用另一种方法来产生这些属性的效果。
例如,应用程序可以使用该
LPAD()
函数将数字填充到所需的宽度,或者它们可以将格式化的数字存储在
CHAR
列中。
对于字符串数据类型,该
BINARY
属性是非标准的MySQL扩展,它是指定
_bin
列字符集(如果未指定列字符集,则为表默认字符集)
的二进制(
)排序规则的
简写
。
在MySQL 8.0中,这种非标准使用
BINARY
是不明确的,因为
utf8mb4
字符集具有多个
_bin
排序规则,因此
BINARY
不推荐使用
该
属性,并且在将来的MySQL版本中将删除
对该
属性的支持。
应调整应用程序以使用显式
_bin
排序规则。
BINARY
指定数据类型或字符集
的用法
保持不变。
非标准C风格
&&
,
||
和
!
运营商认为是标准的SQL同义词
AND
,
OR
和
NOT
运营商,分别已被取消。
应调整使用非标准运算符的应用程序以使用标准运算符。
使用的
||
,除非被弃用
PIPES_AS_CONCAT
启用SQL模式。
在这种情况下,
||
表示SQL标准字符串连接运算符)。
该
JSON_MERGE()
函数已弃用。
请
JSON_MERGE_PRESERVE()
改用。
该
SQL_CALC_FOUND_ROWS
查询修改和相应的
FOUND_ROWS()
功能已被弃用。
有关
FOUND_ROWS()
替代策略的信息,
请参阅
说明。
自MySQL 8.0.13起,不推荐使用对
支持
TABLESPACE =
innodb_file_per_table
和
TABLESPACE =
innodb_temporary
子句的
支持
CREATE
TEMPORARY TABLE
。
该
mysql_upgrade
客户端已被弃用,因为它的功能升级的系统表
mysql
系统架构和对象在其他模式已移动到MySQL服务器。
请参见
第2.11.3节“MySQL升级过程升级”
。
该
--no-dd-upgrade
服务器选项已被弃用。
它被该
--upgrade
选项
取代,该
选项可以更好地控制数据字典和服务器升级行为。
该
mysql_upgrade_info
文件是创建的数据目录,用于存储MySQL版本号,不推荐使用,将在以后的MySQL版本中删除。
以下项目已过时,已在MySQL 8.0中删除。 在显示替代方案的地方,应更新应用程序以使用它们。
对于使用MySQL 8.0中删除的功能的MySQL 5.7应用程序,从MySQL 5.7主服务器复制到MySQL 8.0从服务器时语句可能会失败,或者可能对主服务器和从服务器产生不同的影响。 为避免此类问题,应修改使用MySQL 8.0中删除的功能的应用程序以避免它们并尽可能使用备选方案。
在
innodb_locks_unsafe_for_binlog
除去系统变量。
该
READ
COMMITTED
隔离级别提供了类似的功能。
information_schema_stats
MySQL 8.0.0中引入
的
变量已被删除,并
information_schema_stats_expiry
在MySQL 8.0.3中
替换
。
information_schema_stats_expiry
定义缓存
INFORMATION_SCHEMA
表统计信息
的到期设置
。
有关更多信息,请参见
第8.2.3节“优化INFORMATION_SCHEMA查询”
。
InnoDB
在MySQL 8.0.3中删除了
与已废弃
系统表
相关的代码
。
INFORMATION_SCHEMA
基于
InnoDB
系统表的视图被数据字典表上的内部系统视图替换。
受影响的
InnoDB
INFORMATION_SCHEMA
视图已重命名:
表1.1重命名的InnoDB信息模式视图
旧名 | 新名字 |
---|---|
INNODB_SYS_COLUMNS |
INNODB_COLUMNS |
INNODB_SYS_DATAFILES |
INNODB_DATAFILES |
INNODB_SYS_FIELDS |
INNODB_FIELDS |
INNODB_SYS_FOREIGN |
INNODB_FOREIGN |
INNODB_SYS_FOREIGN_COLS |
INNODB_FOREIGN_COLS |
INNODB_SYS_INDEXES |
INNODB_INDEXES |
INNODB_SYS_TABLES |
INNODB_TABLES |
INNODB_SYS_TABLESPACES |
INNODB_TABLESPACES |
INNODB_SYS_TABLESTATS |
INNODB_TABLESTATS |
INNODB_SYS_VIRTUAL |
INNODB_VIRTUAL |
升级到MySQL 8.0.3或更高版本后,更新引用先前
InnoDB
INFORMATION_SCHEMA
视图名称的
所有脚本
。
删除了与帐户管理相关的以下功能:
使用
GRANT
创建用户。
相反,使用
CREATE
USER
。
遵循这种做法使得
NO_AUTO_CREATE_USER
SQL模式对于
GRANT
语句来说
无关紧要
,因此它也被删除了。
使用
GRANT
修改不是权限指派其他帐户属性。
这包括身份验证,SSL和资源限制属性。
相反,在帐户创建时建立这样的属性,
CREATE
USER
然后用它们修改它们
ALTER
USER
。
IDENTIFIED BY PASSWORD
'
auth_string
'CREATE USER
和的
语法
GRANT
。
相反,使用
for
和
,其中
值是与指定插件兼容的格式。
IDENTIFIED WITH
auth_plugin
AS
'auth_string
'CREATE USER
ALTER USER
'
auth_string
'
此外,由于
IDENTIFIED BY
PASSWORD
语法被删除,
log_builtin_as_identified_by_password
系统变量是多余的并被删除。
该
PASSWORD()
功能。
此外,
PASSWORD()
删除意味着
语法不再可用。
SET
PASSWORD ... =
PASSWORD('
auth_string
')
该
old_passwords
系统变量。
查询缓存已删除。 删除包括以下项目:
该
FLUSH QUERY CACHE
和
RESET QUERY CACHE
语句。
这些系统变量:
query_cache_limit
,
query_cache_min_res_unit
,
query_cache_size
,
query_cache_type
,
query_cache_wlock_invalidate
。
这些状态变量:
Qcache_free_blocks
,
Qcache_free_memory
,
Qcache_hits
,
Qcache_inserts
,
Qcache_lowmem_prunes
,
Qcache_not_cached
,
Qcache_queries_in_cache
,
Qcache_total_blocks
。
这些线程状态:
checking privileges on
cached query
,
checking query cache
for query
,
invalidating query cache
entries
,
sending cached result to
client
,
storing result in query
cache
,
Waiting for query cache
lock
。
该
SQL_CACHE
SELECT
修改。
这些已弃用的查询缓存项目仍然不推荐使用,但不起作用,将在以后的MySQL版本中删除:
SQL_NO_CACHE
SELECT
修改。
该
ndb_cache_check_time
系统变量。
该
have_query_cache
系统变量仍然是过时的,总是有一个值
NO
,并会在将来的MySQL版本中删除。
数据字典提供有关数据库对象的信息,因此服务器不再检查数据目录中的目录名以查找数据库。
因此,
--ignore-db-dir
选项和
ignore_db_dirs
系统变量是无关的并被删除。
该
tx_isolation
和
tx_read_only
系统变量已被删除。
使用
transaction_isolation
和
transaction_read_only
替代。
该
sync_frm
系统变量已被删除,因为
.frm
文件已经过时。
该
secure_auth
系统变量和
--secure-auth
客户端选项已被删除。
已删除C API函数
的
MYSQL_SECURE_AUTH
选项
mysql_options()
。
的
multi_range_count
系统变量被移除。
该
log_warnings
系统变量和
--log-warnings
服务器选项已被删除。
请改用
log_error_verbosity
系统变量。
sql_log_bin
删除
了
系统变量
的全局范围
。
sql_log_bin
只有会话范围,
@@GLOBAL.sql_log_bin
应该调整
依赖访问的应用程序
。
该
metadata_locks_cache_size
和
metadata_locks_hash_instances
系统变量被删除。
未使用
date_format
,
datetime_format
,
time_format
,和
max_tmp_tables
系统变量被删除。
这些弃用兼容性SQL模式被移除:
DB2
,
MAXDB
,
MSSQL
,
MYSQL323
,
MYSQL40
,
ORACLE
,
POSTGRESQL
,
NO_FIELD_OPTIONS
,
NO_KEY_OPTIONS
,
NO_TABLE_OPTIONS
。
它们不能再分配给
sql_mode
系统变量或用作
mysqldump
--compatible
选项的
允许值
。
删除
MAXDB
意味着
TIMESTAMP
数据类型为
CREATE
TABLE
或被
ALTER
TABLE
视为
TIMESTAMP
,并且不再被视为
DATETIME
。
已
删除的子句
的已弃用
ASC
或
DESC
限定符
GROUP
BY
。
以前依赖于
GROUP BY
排序的
查询
可能会产生与以前的MySQL版本不同的结果。
要生成给定的排序顺序,请提供一个
ORDER BY
子句。
该
语句
的
EXTENDED
和
PARTITIONS
关键字
EXPLAIN
已被删除。
这些关键字是不必要的,因为它们的效果总是启用
这些与加密相关的项目已删除:
该
ENCRYPT()
功能。
的
DES_ENCRYPT()
,和
DES_DECRYPT()
功能的
--des-key-file
选项,
have_crypt
系统变量,则
DES_KEY_FILE
该选项
FLUSH
语句和
HAVE_CRYPT
CMake的
选项。
取代已删除的加密函数:对于
ENCRYPT()
,请考虑使用
SHA2()
单向散列。
对于其他人,请考虑使用
AES_ENCRYPT()
而
AES_DECRYPT()
不是。
在MySQL 5.7中,不推荐使用多个名称下的几个空间函数,以便使空间函数名称空间更加一致,目标是每个空间函数名称
ST_
在执行精确操作时开始,或者
MBR
如果它执行了基于最小边界矩形的操作。
在MySQL 8.0中,删除了不推荐使用的函数,只留下相应的
函数
ST_
和
MBR
函数:
这些功能有利于去除的
MBR
名字:
Contains()
,
Disjoint()
,
Equals()
,
Intersects()
,
Overlaps()
,
Within()
。
这些功能有利于去除的
ST_
名字:
Area()
,
AsBinary()
,
AsText()
,
AsWKB()
,
AsWKT()
,
Buffer()
,
Centroid()
,
ConvexHull()
,
Crosses()
,
Dimension()
,
Distance()
,
EndPoint()
,
Envelope()
,
ExteriorRing()
,
GeomCollFromText()
,
GeomCollFromWKB()
,
GeomFromText()
,
GeomFromWKB()
,
GeometryCollectionFromText()
,
GeometryCollectionFromWKB()
,
GeometryFromText()
,
GeometryFromWKB()
,
GeometryN()
,
GeometryType()
,
InteriorRingN()
,
IsClosed()
,
IsEmpty()
,
IsSimple()
,
LineFromText()
,
LineFromWKB()
,
LineStringFromText()
,
LineStringFromWKB()
,
MLineFromText()
,
MLineFromWKB()
,
MPointFromText()
,
MPointFromWKB()
,
MPolyFromText()
,
MPolyFromWKB()
,
MultiLineStringFromText()
,
MultiLineStringFromWKB()
,
MultiPointFromText()
,
MultiPointFromWKB()
,
MultiPolygonFromText()
,
MultiPolygonFromWKB()
,
NumGeometries()
,
NumInteriorRings()
,
NumPoints()
,
PointFromText()
,
PointFromWKB()
,
PointN()
,
PolyFromText()
,
PolyFromWKB()
,
PolygonFromText()
,
PolygonFromWKB()
,
SRID()
,
StartPoint()
,
Touches()
,
X()
,
Y()
。
GLength()
被删除有利于
ST_Length()
。
第12.16.4节“从WKB值创建几何值 的函数”中描述的函数 以前接受WKB字符串或几何参数。 不再允许使用几何参数并产生错误。 有关使用几何参数迁移查询的指南,请参阅该部分。
解析器不再被视为
SQL语句中
\N
的同义词
NULL
。
请
NULL
改用。
这种变化并不影响执行文本文件导入和导出操作
LOAD
DATA
或
SELECT
... INTO
OUTFILE
用于其
NULL
继续受到代表
\N
。
请参见
第13.2.7节“LOAD DATA语法”
。
PROCEDURE ANALYSE()
语法被删除。
客户端
--ssl
和
--ssl-verify-server-cert
选项已被删除。
使用
--ssl-mode=REQUIRED
而不是
--ssl=1
或
--enable-ssl
。
使用
--ssl-mode=DISABLED
替代
--ssl=0
,
--skip-ssl
或
--disable-ssl
。
使用
--ssl-mode=VERIFY_IDENTITY
而不是
--ssl-verify-server-cert
选项。
(服务器端
--ssl
选项保持不变。)
对于C API,
MYSQL_OPT_SSL_ENFORCE
以及
MYSQL_OPT_SSL_VERIFY_SERVER_CERT
选项
mysql_options()
对应于客户端
--ssl
和
--ssl-verify-server-cert
选项和被去除。
使用
MYSQL_OPT_SSL_MODE
选项值
SSL_MODE_REQUIRED
或
SSL_MODE_VERIFY_IDENTITY
代替。
该
--temp-pool
移除服务器选项。
将
删除
--ignore-builtin-innodb
服务器选项和
ignore_builtin_innodb
系统变量。
服务器不再通过添加
#mysql50#
前缀
将包含特殊字符的MySQL 5.1之前的数据库名称转换为5.1格式
。
由于不再执行这些转换,因此将
删除mysqlcheck
和语句
的
子句
以及
状态变量的
选项
--fix-db-names
和
--fix-table-names
选项
。
UPGRADE DATA
DIRECTORY NAME
ALTER DATABASE
Com_alter_db_upgrade
升级仅支持从一个主要版本到另一个主要版本(例如,5.0到5.1或5.1到5.5),因此将旧的5.0数据库名称转换为当前版本的MySQL几乎不需要。 作为解决方法,在升级到更新版本之前,将MySQL 5.0安装升级到MySQL 5.1。
该
mysql_install_db的
计划已经从MySQL分发中删除。
应该通过
使用
或
选项
调用
mysqld
来执行数据目录初始化
。
此外,
删除
了
mysql_install_db
使用的
mysqld
选项,
并删除
了控制
mysql_install_db
的安装位置的
选项
。
--initialize
--initialize-insecure
--bootstrap
INSTALL_SCRIPTDIR
CMake
通用分区处理程序已从MySQL服务器中删除。
为了支持给定表的分区,用于表的存储引擎现在必须提供其自己的(
“
本机
”
)分区处理程序。
在
--partition
和
--skip-partition
选项从MySQL服务器删除,分区相关条目中的输出不再显示
SHOW
PLUGINS
或在
INFORMATION_SCHEMA.PLUGINS
表中。
两个MySQL存储引擎目前提供原生支持-分区
InnoDB
和
NDB
;
其中,仅
InnoDB
在MySQL 8.0中受支持。
任何使用任何其他存储引擎在MySQL 8.0中创建分区表的尝试都会失败。
升级的分歧。
不支持
使用除
MySQL(或更早版本)
之外的存储引擎
InnoDB
(例如
MyISAM
)到MySQL 8.0
的直接升级分区表
。
处理这样一个表有两种选择:
使用,删除表的分区
ALTER
TABLE ... REMOVE PARTITIONING
。
更改用于表的存储引擎
InnoDB
,用
ALTER
TABLE
... ENGINE=INNODB
。
在
InnoDB
将服务器升级到MySQL 8.0之前,
必须为每个分区的非
表
执行刚刚列出的两个操作中的至少一个
。
否则,升级后无法使用此类表。
由于表创建语句导致使用没有分区支持的存储引擎的分区表现在失败并出现错误(
ER_CHECK_NOT_IMPLEMENTED
),因此必须确保转储文件中的任何语句(例如
mysqldump
编写的语句
)从您希望导入到创建分区表的MySQL 8.0服务器的旧版MySQL中,不会指定存储引擎,例如
MyISAM
没有本机分区处理程序
的存储引擎
。
您可以通过执行以下任一操作来执行此操作:
从除
CREATE TABLE
使用除
STORAGE ENGINE
选项之外
的值的语句中
删除对分区的任何引用
InnoDB
。
默认情况下
InnoDB
,
将存储引擎指定为
或允许
InnoDB
用作表的存储引擎。
有关更多信息,请参见 第23.6.2节“分区与存储引擎相关的限制” 。
系统和状态变量信息不再保留在
INFORMATION_SCHEMA
。
这些表被删除:
GLOBAL_VARIABLES
,
SESSION_VARIABLES
,
GLOBAL_STATUS
,
SESSION_STATUS
。
请改用相应的Performance Schema表。
请参见
第26.12.13节“性能模式系统变量表”
和
第26.12.14节“性能模式状态变量表”
。
此外,
show_compatibility_56
系统变量已被删除。
它用于过渡期间系统和状态变量信息
INFORMATION_SCHEMA
表已移至Performance Schema表,不再需要。
这些状态变量被删除:
Slave_heartbeat_period
,
Slave_last_heartbeat
,
Slave_received_heartbeats
,
Slave_retried_transactions
,
Slave_running
。
它们提供的信息可在性能模式表中找到;
请参阅
迁移到性能架构系统和状态变量表
。
setup_timers
删除了
性能架构
表,表中的
TICK
行也是如此
performance_timers
。
该
libmysqld
嵌入式服务器库被删除,连同:
在
,
,
,和
选项
mysql_options()
MYSQL_OPT_GUESS_CONNECTION
MYSQL_OPT_USE_EMBEDDED_CONNECTION
MYSQL_OPT_USE_REMOTE_CONNECTION
MYSQL_SET_CLIENT_IP
该
mysql_config
--libmysqld-libs
,
--embedded-libs
和
--embedded
选项
该
CMake的
WITH_EMBEDDED_SERVER
,
WITH_EMBEDDED_SHARED_LIBRARY
和
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
选项
(未记录的)
mysql
--server-arg
选项
该
mysqltest
--embedded-server
,
--server-arg
和
--server-file
选项
该 mysqltest_embedded 和 mysql_client_test_embedded 测试程序
该
mysql_plugin
移除工具。
替代方案包括使用
--plugin-load
or
--plugin-load-add
选项
在服务器启动时加载插件
,或者在运行时使用
INSTALL
PLUGIN
语句
加载插件
。
该 的resolveip 工具被删除。 可以使用 nslookup , host 或 dig 。
该 resolve_stack_dump 工具被删除。 来自官方MySQL构建的堆栈跟踪始终是符号化的,因此不需要使用 resolve_stack_dump 。
以下服务器错误代码未使用且已被删除。 应更新专门针对任何这些错误进行测试的应用程序。
ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE ER_BINLOG_ROW_RBR_TO_SBR ER_BINLOG_ROW_WRONG_TABLE_DEF ER_CANT_ACTIVATE_LOG ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION ER_CANT_CREATE_FEDERATED_TABLE ER_CANT_CREATE_SROUTINE ER_CANT_DELETE_FILE ER_CANT_GET_WD ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF ER_CANT_SET_WD ER_CANT_WRITE_LOCK_LOG_TABLE ER_CREATE_DB_WITH_READ_LOCK ER_CYCLIC_REFERENCE ER_DB_DROP_DELETE ER_DELAYED_NOT_SUPPORTED ER_DIFF_GROUPS_PROC ER_DISK_FULL ER_DROP_DB_WITH_READ_LOCK ER_DROP_USER ER_DUMP_NOT_IMPLEMENTED ER_ERROR_DURING_CHECKPOINT ER_ERROR_ON_CLOSE ER_EVENTS_DB_ERROR ER_EVENT_CANNOT_DELETE ER_EVENT_CANT_ALTER ER_EVENT_COMPILE_ERROR ER_EVENT_DATA_TOO_LONG ER_EVENT_DROP_FAILED ER_EVENT_MODIFY_QUEUE_ERROR ER_EVENT_NEITHER_M_EXPR_NOR_M_AT ER_EVENT_OPEN_TABLE_FAILED ER_EVENT_STORE_FAILED ER_EXEC_STMT_WITH_OPEN_CURSOR ER_FAILED_ROUTINE_BREAK_BINLOG ER_FLUSH_MASTER_BINLOG_CLOSED ER_FORM_NOT_FOUND ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED ER_FRM_UNKNOWN_TYPE ER_GOT_SIGNAL ER_GRANT_PLUGIN_USER_EXISTS ER_GTID_MODE_REQUIRES_BINLOG ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST ER_HASHCHK ER_INDEX_REBUILD ER_INNODB_NO_FT_USES_PARSER ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR ER_LOAD_DATA_INVALID_COLUMN_UNUSED ER_LOGGING_PROHIBIT_CHANGING_OF ER_MALFORMED_DEFINER ER_MASTER_KEY_ROTATION_ERROR_BY_SE ER_NDB_CANT_SWITCH_BINLOG_FORMAT ER_NEVER_USED ER_NISAMCHK ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR ER_NO_FILE_MAPPING ER_NO_GROUP_FOR_PROC ER_NO_RAID_COMPILED ER_NO_SUCH_KEY_VALUE ER_NO_SUCH_PARTITION__UNUSED ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED ER_ORDER_WITH_PROC ER_PARTITION_SUBPARTITION_ERROR ER_PARTITION_SUBPART_MIX_ERROR ER_PART_STATE_ERROR ER_PASSWD_LENGTH ER_QUERY_ON_MASTER ER_RBR_NOT_AVAILABLE ER_SKIPPING_LOGGED_TRANSACTION ER_SLAVE_CHANNEL_DELETE ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT ER_SLAVE_MUST_STOP ER_SLAVE_WAS_NOT_RUNNING ER_SLAVE_WAS_RUNNING ER_SP_GOTO_IN_HNDLR ER_SP_PROC_TABLE_CORRUPT ER_SQL_MODE_NO_EFFECT ER_SR_INVALID_CREATION_CTX ER_TABLE_NEEDS_UPG_PART ER_TOO_MUCH_AUTO_TIMESTAMP_COLS ER_UNEXPECTED_EOF ER_UNION_TABLES_IN_DIFFERENT_DIR ER_UNSUPPORTED_BY_REPLICATION_THREAD ER_UNUSED1 ER_UNUSED2 ER_UNUSED3 ER_UNUSED4 ER_UNUSED5 ER_UNUSED6 ER_VIEW_SELECT_DERIVED_UNUSED ER_WRONG_MAGIC ER_WSAS_FAILED
已弃用的
表
INFORMATION_SCHEMA
INNODB_LOCKS
和
INNODB_LOCK_WAITS
表将被删除。
请改用Performance Schema
data_locks
和
data_lock_waits
表。
在MySQL 5.7中,
LOCK_TABLE
在列
INNODB_LOCKS
表和
locked_table
在列
sys
模式
innodb_lock_waits
和
x$innodb_lock_waits
视图包含组合模式/表名的值。
在MySQL 8.0中,
data_locks
表和
sys
模式视图包含单独的模式名称和表名称列。
请参见
第27.4.3.9节“innodb_lock_waits和x $ innodb_lock_waits视图”
。
InnoDB
不再支持压缩的临时表。
当
innodb_strict_mode
启用(默认值),
CREATE
TEMPORARY TABLE
如果返回错误
ROW_FORMAT=COMPRESSED
或
KEY_BLOCK_SIZE
指定的。
如果
innodb_strict_mode
禁用,则发出警告,并使用非压缩行格式创建临时表。
InnoDB
在MySQL数据目录之外创建表空间数据文件时,
不再创建
.isl
文件(
InnoDB
符号链接文件)。
该
innodb_directories
选项现在支持查找在数据目录之外创建的表空间文件。
通过此更改,
.isl
不再支持
在服务器脱机时通过手动修改
文件来
移动远程表空间
。
此
innodb_directories
选项
现在支持移动远程表空间文件
。
请参见
第15.6.3.8节“在服务器脱机时移动表空间文件”
。
InnoDB
删除了
以下
文件格式变量:
innodb_file_format
innodb_file_format_check
innodb_file_format_max
innodb_large_prefix
文件格式变量是创建与
InnoDB
MySQL 5.1
早期版本兼容的表所必需的
。
现在MySQL 5.1已经到了产品生命周期的末期,不再需要这些选项。
该
FILE_FORMAT
列已从
INNODB_TABLES
和
INNODB_TABLESPACES
信息模式表中
删除
。
的
innodb_support_xa
系统变量,这使得能够对两相支持XA事务的提交,除去。
InnoDB
始终启用对XA事务中的两阶段提交的支持。
删除了对DTrace的支持。
该
JSON_APPEND()
功能已被删除。
请
JSON_ARRAY_APPEND()
改用。
InnoDB
MySQL 8.0.13中删除了
在共享
表空间中
放置表分区的支持
。
共享表空间包括
InnoDB
系统表空间和通用表空间。
有关识别共享表空间中的分区并将其移动到每个表文件表空间的信息,请参见
第2.11.5节“准备升级安装”
。
支持
SET
在MySQL 8.0.13中不推荐使用的
语句中设置用户变量
。
此功能可能会在MySQL 9.0中删除。
该
--ndb
PERROR
移除选项。
请改用
ndb_perror
实用程序。
该
innodb_undo_logs
变量已被删除。
该
innodb_rollback_segments
变量执行相同的功能,应该代替。
在
Innodb_available_undo_logs
取出状态变量。
可以使用检索每个表空间的可用回滚段的数量
SHOW
VARIABLES LIKE 'innodb_rollback_segments';
从MySQL 8.0.14开始,先前弃用的
innodb_undo_tablespaces
变量不再可配置。
有关更多信息,请参见
第15.6.3.4节“撤消表空间”
。
ALTER TABLE ... UPGRADE
PARTITIONING
已取消
对该
声明的
支持
。
从MySQL 8.0.16开始,
internal_tmp_disk_storage_engine
已删除
对
系统变量的
支持
;
磁盘上的内部临时表现在始终使用
InnoDB
存储引擎。
有关
详细信息,
请参阅
磁盘内部临时表的存储引擎
。
本节列出了第一次添加,已弃用或已在MySQL 8.0中删除的服务器变量,状态变量和选项。
以下系统变量,状态变量和选项是MySQL 8.0中的新增功能,并未包含在任何先前的发行版系列中。
Acl_cache_items_count
:缓存的权限对象的数量。
在MySQL 8.0.0中添加。
Audit_log_current_size
:审核日志文件当前大小。
在MySQL 8.0.11中添加。
Audit_log_event_max_drop_size
:最大跌幅审计事件的大小。
在MySQL 8.0.11中添加。
Audit_log_events
:已处理审计事件的数量。
在MySQL 8.0.11中添加。
Audit_log_events_filtered
:筛选的审核事件数。
在MySQL 8.0.11中添加。
Audit_log_events_lost
:已审核事件的丢弃数量。
在MySQL 8.0.11中添加。
Audit_log_events_written
:书面审计事件的数量。
在MySQL 8.0.11中添加。
Audit_log_total_size
:书面审计事件的总体大小。
在MySQL 8.0.11中添加。
Audit_log_write_waits
:写延迟审计事件的数量。
在MySQL 8.0.11中添加。
Caching_sha2_password_rsa_public_key
:caching_sha2_password认证插件RSA公钥值。
在MySQL 8.0.4中添加。
Com_alter_resource_group
:ALTER RESOURCE GROUP语句的计数。
在MySQL 8.0.3中添加。
Com_alter_user_default_role
:ALTER USER ... DEFAULT ROLE语句的计数。
在MySQL 8.0.0中添加。
Com_create_resource_group
:CREATE RESOURCE GROUP语句的计数。
在MySQL 8.0.3中添加。
Com_create_role
:CREATE ROLE语句的计数。
在MySQL 8.0.0中添加。
Com_drop_resource_group
:DROP RESOURCE GROUP语句的计数。
在MySQL 8.0.3中添加。
Com_drop_role
:DROP ROLE语句的计数。
在MySQL 8.0.0中添加。
Com_grant_roles
:GRANT ROLE语句的计数。
在MySQL 8.0.0中添加。
Com_install_component
:INSTALL COMPONENT语句的计数。
在MySQL 8.0.0中添加。
Com_revoke_roles
:REVOKE ROLES语句的计数。
在MySQL 8.0.0中添加。
Com_set_resource_group
:SET RESOURCE GROUP语句的计数。
在MySQL 8.0.3中添加。
Com_set_role
:SET ROLE语句的计数。
在MySQL 8.0.0中添加。
Com_uninstall_component
:UINSTALL COMPONENT语句的计数。
在MySQL 8.0.0中添加。
Connection_control_delay_generated
:服务器延迟连接请求的次数。
在MySQL 8.0.1中添加。
Current_tls_ca
:ssl_ca系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_capath
:ssl_capath系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_cert
:ssl_cert系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_cipher
:ssl_cipher系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_ciphersuites
:tsl_ciphersuites系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_crl
:ssl_crl系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_crlpath
:ssl_crlpath系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_key
:ssl_key系统变量的当前值。
在MySQL 8.0.16中添加。
Current_tls_version
:tls_version系统变量的当前值。
在MySQL 8.0.16中添加。
Firewall_access_denied
:MySQL Enterprise Firewall拒绝的语句数。
在MySQL 8.0.11中添加。
Firewall_access_granted
:MySQL Enterprise Firewall接受的语句数。
在MySQL 8.0.11中添加。
Firewall_cached_entries
:MySQL Enterprise Firewall记录的语句数。
在MySQL 8.0.11中添加。
Secondary_engine_execution_count
:供将来使用。
在MySQL 8.0.13中添加。
activate_all_roles_on_login
:是否在连接时激活所有用户角色。
在MySQL 8.0.2中添加。
admin_address
:绑定到管理接口上的连接的IP地址。
在MySQL 8.0.14中添加。
admin_port
:用于管理接口上的连接的TCP / IP号。
在MySQL 8.0.14中添加。
audit-log
:是否激活审核日志插件。
在MySQL 8.0.11中添加。
audit_log_buffer_size
:审核日志缓冲区的大小。
在MySQL 8.0.11中添加。
audit_log_compression
:审核日志文件压缩方法。
在MySQL 8.0.11中添加。
audit_log_connection_policy
:审核与连接相关的事件的日志记录策略。
在MySQL 8.0.11中添加。
audit_log_current_session
:是否审核当前会话。
在MySQL 8.0.11中添加。
audit_log_encryption
:审核日志文件加密方法。
在MySQL 8.0.11中添加。
audit_log_exclude_accounts
:帐户不审核。
在MySQL 8.0.11中添加。
audit_log_file
:审核日志文件的名称。
在MySQL 8.0.11中添加。
audit_log_filter_id
:当前审核日志筛选器的ID。
在MySQL 8.0.11中添加。
audit_log_flush
:关闭并重新打开审核日志文件。
在MySQL 8.0.11中添加。
audit_log_format
:审核日志文件格式。
在MySQL 8.0.11中添加。
audit_log_include_accounts
:审计帐户。
在MySQL 8.0.11中添加。
audit_log_policy
:审核日志记录策略。
在MySQL 8.0.11中添加。
audit_log_read_buffer_size
:审核日志文件读取缓冲区大小。
在MySQL 8.0.11中添加。
audit_log_rotate_on_size
:关闭并以特定大小重新打开审核日志文件。
在MySQL 8.0.11中添加。
audit_log_statement_policy
:审核与语句相关的事件的日志记录策略。
在MySQL 8.0.11中添加。
audit_log_strategy
:审计日志记录策略。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_auth_method_name
:身份验证方法名称。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_bind_base_dn
:LDAP服务器基础专有名称。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_bind_root_dn
:LDAP服务器根专有名称。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_bind_root_pwd
:LDAP服务器root绑定密码。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_ca_path
:LDAP服务器证书颁发机构文件名。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_group_search_attr
:LDAP服务器组搜索属性。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_group_search_filter
:LDAP自定义组搜索过滤器。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_init_pool_size
:LDAP服务器初始连接池大小。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_log_status
:LDAP服务器日志级别。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_max_pool_size
:LDAP服务器最大连接池大小。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_server_host
:LDAP服务器主机名或IP地址。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_server_port
:LDAP服务器端口号。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_tls
:是否使用LDAP服务器的加密连接。
在MySQL 8.0.11中添加。
authentication_ldap_sasl_user_search_attr
:LDAP服务器用户搜索属性。
在MySQL 8.0.11中添加。
authentication_ldap_simple_auth_method_name
:身份验证方法名称。
在MySQL 8.0.11中添加。
authentication_ldap_simple_bind_base_dn
:LDAP服务器基础专有名称。
在MySQL 8.0.11中添加。
authentication_ldap_simple_bind_root_dn
:LDAP服务器根专有名称。
在MySQL 8.0.11中添加。
authentication_ldap_simple_bind_root_pwd
:LDAP服务器root绑定密码。
在MySQL 8.0.11中添加。
authentication_ldap_simple_ca_path
:LDAP服务器证书颁发机构文件名。
在MySQL 8.0.11中添加。
authentication_ldap_simple_group_search_attr
:LDAP服务器组搜索属性。
在MySQL 8.0.11中添加。
authentication_ldap_simple_group_search_filter
:LDAP自定义组搜索过滤器。
在MySQL 8.0.11中添加。
authentication_ldap_simple_init_pool_size
:LDAP服务器初始连接池大小。
在MySQL 8.0.11中添加。
authentication_ldap_simple_log_status
:LDAP服务器日志级别。
在MySQL 8.0.11中添加。
authentication_ldap_simple_max_pool_size
:LDAP服务器最大连接池大小。
在MySQL 8.0.11中添加。
authentication_ldap_simple_server_host
:LDAP服务器主机名或IP地址。
在MySQL 8.0.11中添加。
authentication_ldap_simple_server_port
:LDAP服务器端口号。
在MySQL 8.0.11中添加。
authentication_ldap_simple_tls
:是否使用LDAP服务器的加密连接。
在MySQL 8.0.11中添加。
authentication_ldap_simple_user_search_attr
:LDAP服务器用户搜索属性。
在MySQL 8.0.11中添加。
authentication_windows_log_level
:Windows身份验证插件日志记录级别。
在MySQL 8.0.11中添加。
authentication_windows_use_principal_name
:是否使用Windows身份验证插件主体名称。
在MySQL 8.0.11中添加。
binlog_encryption
:为此服务器上的二进制日志文件和中继日志文件启用加密。
在MySQL 8.0.14中添加。
binlog_expire_logs_seconds
:在这么多秒后清除二进制日志。
在MySQL 8.0.1中添加。
binlog_rotate_encryption_master_key_at_startup
:在服务器启动时旋转二进制日志主密钥。
在MySQL 8.0.14中添加。
binlog_row_metadata
:配置使用基于行的日志记录时记录的表相关元数据二进制文件的数量。在MySQL 8.0.1中添加。
binlog_row_value_options
:为基于行的复制启用部分JSON更新的二进制日志记录。在MySQL 8.0.3中添加。
binlog_transaction_dependency_history_size
:为查找上次更新某行的事务而保留的行哈希数。在MySQL 8.0.1中添加。
binlog_transaction_dependency_tracking
:依赖关系信息的来源(提交时间戳或事务写入集),从中可以评估slave的多线程应用程序可以并行执行哪些事务。在MySQL 8.0.1中添加。
caching_sha2_password_auto_generate_rsa_keys
:是否自动生成RSA密钥对文件。
在MySQL 8.0.4中添加。
caching_sha2_password_private_key_path
:SHA2身份验证插件私钥路径名。
在MySQL 8.0.3中添加。
caching_sha2_password_public_key_path
:SHA2身份验证插件公钥路径名。
在MySQL 8.0.3中添加。
connection_control_failed_connections_threshold
:延迟发生之前连续失败的连接尝试。
在MySQL 8.0.1中添加。
connection_control_max_connection_delay
:服务器响应连接尝试失败的最大延迟(毫秒)。
在MySQL 8.0.1中添加。
connection_control_min_connection_delay
:服务器响应连接尝试失败的最小延迟(毫秒)。
在MySQL 8.0.1中添加。
create_admin_listener_thread
:是否在管理界面上使用专用侦听线程进行连接。
在MySQL 8.0.14中添加。
cte_max_recursion_depth
:公用表表达式最大递归深度。
在MySQL 8.0.3中添加。
ddl-rewriter
:是否激活ddl_rewriter插件。
在MySQL 8.0.16中添加。
default_collation_for_utf8mb4
:utf8mb4字符集的默认排序规则。
在MySQL 8.0.11中添加。
default_table_encryption
:默认架构和表空间加密设置。
在MySQL 8.0.16中添加。
dragnet.Status
:最近分配给dragnet.log_error_filter_rules的结果。
在MySQL 8.0.12中添加。
dragnet.log_error_filter_rules
:筛选错误日志记录的规则。
在MySQL 8.0.4中添加。
early-plugin-load
:在加载强制内置插件之前和存储引擎初始化之前指定要加载的插件。
在MySQL 8.0.0中添加。
group_replication_autorejoin_tries
:成员自动重新加入组的尝试次数。
在MySQL 8.0.16中添加。
group_replication_communication_debug_options
:组复制组件的调试消息级别。在MySQL 8.0.3中添加。
group_replication_communication_max_message_size
:组复制通信的最大邮件大小,较大的邮件是碎片。
在MySQL 8.0.16中添加。
group_replication_consistency
:组提供的事务一致性保证的类型。
在MySQL 8.0.14中添加。
group_replication_exit_state_action
:实例在不自觉地离开组时的行为方式。
在MySQL 8.0.12中添加。
group_replication_flow_control_hold_percent
:定义未使用的组配额的百分比。
在MySQL 8.0.2中添加。
group_replication_flow_control_max_commit_quota
:定义组的最大流量控制配额。
在MySQL 8.0.2中添加。
group_replication_flow_control_member_quota_percent
:定义计算配额时成员应该假定的配额百分比。
在MySQL 8.0.2中添加。
group_replication_flow_control_min_quota
:控制可分配给成员的最低流量控制配额。
在MySQL 8.0.2中添加。
group_replication_flow_control_min_recovery_quota
:控制由于组中的另一个恢复成员而可以分配给成员的最低配额。
在MySQL 8.0.2中添加。
group_replication_flow_control_period
:定义流控制迭代之间等待的秒数。
在MySQL 8.0.2中添加。
group_replication_flow_control_release_percent
:定义当流控制不再需要限制编写器成员时应如何释放组配额。
在MySQL 8.0.2中添加。
group_replication_member_expel_timeout
:组成员可疑故障与组被驱逐之间的时间,导致组成员身份重新配置。在MySQL 8.0.13中添加。
group_replication_member_weight
:该成员被选为主要成员的机会。
在MySQL 8.0.2中添加。
group_replication_message_cache_size
:组通信引擎(XCom)中的消息缓存的最大内存。
在MySQL 8.0.16中添加。
group_replication_recovery_get_public_key
:是否接受从master获取公钥的首选项。
在MySQL 8.0.4中添加。
group_replication_recovery_public_key_path
:接受公钥信息。
在MySQL 8.0.4中添加。
group_replication_unreachable_majority_timeout
:等待导致少数群体离开群组的网络分区需要多长时间。
在MySQL 8.0.2中添加。
histogram_generation_max_mem_size
:用于创建直方图统计信息的最大内存。
在MySQL 8.0.2中添加。
immediate_server_version
:作为复制拓扑中的直接主服务器的服务器的MySQL服务器版本号。
在MySQL 8.0.14中添加。
information_schema_stats_expiry
:缓存表统计信息的到期设置。
在MySQL 8.0.3中添加。
innodb_buffer_pool_debug
:当缓冲池的大小小于1GB时,允许多个缓冲池实例。
在MySQL 8.0.0中添加。
innodb_buffer_pool_in_core_file
:控制将缓冲池页面写入核心文件。
在MySQL 8.0.14中添加。
innodb_checkpoint_disabled
:禁用检查点,以便故意服务器退出始终启动恢复。
在MySQL 8.0.2中添加。
innodb_ddl_log_crash_reset_debug
:一个调试选项,用于重置DDL日志崩溃注入计数器。
在MySQL 8.0.3中添加。
innodb_deadlock_detect
:启用或禁用死锁检测。
在MySQL 8.0.0中添加。
innodb_dedicated_server
:启用缓冲池大小,日志文件大小和刷新方法的自动配置。
在MySQL 8.0.3中添加。
innodb_directories
:定义在启动时扫描表空间数据文件的目录。
在MySQL 8.0.4中添加。
innodb_fsync_threshold
:控制InnoDB在创建新文件时调用fsync的频率。
在MySQL 8.0.13中添加。
innodb_log_checkpoint_fuzzy_now
:一个调试选项,强制InnoDB编写模糊检查点。
在MySQL 8.0.13中添加。
innodb_log_spin_cpu_abs_lwm
:最小CPU使用量,低于该值,用户线程在等待刷新的重做时不再旋转。
在MySQL 8.0.11中添加。
innodb_log_spin_cpu_pct_hwm
:最大CPU使用量,高于该值,用户线程在等待刷新的重做时不再旋转。
在MySQL 8.0.11中添加。
innodb_log_wait_for_flush_spin_hwm
:用户线程在等待刷新重做时不再旋转的最大平均日志刷新时间。
在MySQL 8.0.11中添加。
innodb_parallel_read_threads
:定义并行索引读取的线程数。
在MySQL 8.0.14中添加。
innodb_print_ddl_logs
:是否将DDL日志打印到错误日志。
在MySQL 8.0.3中添加。
innodb_redo_log_encrypt
:控制加密表空间的重做日志数据的加密。
在MySQL 8.0.1中添加。
innodb_scan_directories
:定义在InnoDB恢复期间扫描表空间文件的目录。
在MySQL 8.0.2中添加。
innodb_spin_wait_pause_multiplier
:定义用于确定自旋等待循环中PAUSE指令数的乘数值。在MySQL 8.0.16中添加。
innodb_stats_include_delete_marked
:在计算持久的InnoDB统计信息时包括删除标记的记录。
在MySQL 8.0.1中添加。
innodb_temp_tablespaces_dir
:会话临时表空间路径。
在MySQL 8.0.13中添加。
innodb_tmpdir
:在线ALTER TABLE操作期间创建的临时表文件的目录位置。
在MySQL 8.0.0中添加。
innodb_undo_log_encrypt
:控制加密表空间的撤消日志数据的加密。
在MySQL 8.0.1中添加。
internal_tmp_mem_storage_engine
:定义用于内部内存临时表的存储。
在MySQL 8.0.2中添加。
keyring-migration-destination
:密钥迁移目标密钥环插件。
在MySQL 8.0.4中添加。
keyring-migration-host
:用于连接到运行服务器以进行密钥迁移的主机名。
在MySQL 8.0.4中添加。
keyring-migration-password
:用于连接到运行服务器以进行密钥迁移的密码。
在MySQL 8.0.4中添加。
keyring-migration-port
:用于连接到正在运行的服务器以进行密钥迁移的TCP / IP端口号。
在MySQL 8.0.4中添加。
keyring-migration-socket
:Unix套接字文件或Windows命名管道,用于连接到运行的服务器以进行密钥迁移。
在MySQL 8.0.4中添加。
keyring-migration-source
:密钥迁移源密钥环插件。
在MySQL 8.0.4中添加。
keyring-migration-user
:用于连接到运行服务器以进行密钥迁移的用户名。
在MySQL 8.0.4中添加。
keyring_aws_cmk_id
:AWS keyring插件客户主密钥ID值。
在MySQL 8.0.11中添加。
keyring_aws_conf_file
:AWS keyring插件配置文件位置。
在MySQL 8.0.11中添加。
keyring_aws_data_file
:AWS keyring插件存储文件位置。
在MySQL 8.0.11中添加。
keyring_aws_region
:AWS keyring插件区域。
在MySQL 8.0.11中添加。
keyring_encrypted_file_data
:keyring_encrypted_file插件数据文件。
在MySQL 8.0.11中添加。
keyring_encrypted_file_password
:keyring_encrypted_file插件密码。
在MySQL 8.0.11中添加。
keyring_okv_conf_dir
:Oracle Key Vault密钥环插件配置目录。
在MySQL 8.0.11中添加。
keyring_operations
:是否启用密钥环操作。
在MySQL 8.0.4中添加。
lock_order
:是否在运行时启用LOCK_ORDER工具。
在MySQL 8.0.17中添加。
lock_order_debug_loop
:当LOCK_ORDER工具遇到标记为循环的依赖项时是否导致调试断言。
在MySQL 8.0.17中添加。
lock_order_debug_missing_arc
:当LOCK_ORDER工具遇到未声明的依赖项时是否导致调试断言。
在MySQL 8.0.17中添加。
lock_order_debug_missing_key
:当LOCK_ORDER工具遇到没有使用性能模式正确检测的对象时,是否导致调试断言。
在MySQL 8.0.17中添加。
lock_order_debug_missing_unlock
:当LOCK_ORDER工具遇到仍然保持时被销毁的锁时,是否导致调试断言。
在MySQL 8.0.17中添加。
lock_order_dependencies
:lock_order_dependencies.txt文件的路径。
在MySQL 8.0.17中添加。
lock_order_extra_dependencies
:第二个依赖项文件的路径。
在MySQL 8.0.17中添加。
lock_order_output_directory
:LOCK_ORDER工具写入日志的目录。
在MySQL 8.0.17中添加。
lock_order_print_txt
:是否执行锁定顺序图分析和打印文本报告。
在MySQL 8.0.17中添加。
lock_order_trace_loop
:当LOCK_ORDER工具遇到标记为循环的依赖项时是否打印日志文件跟踪。
在MySQL 8.0.17中添加。
lock_order_trace_missing_arc
:当LOCK_ORDER工具遇到未声明的依赖项时是否打印日志文件跟踪。
在MySQL 8.0.17中添加。
lock_order_trace_missing_key
:当LOCK_ORDER工具遇到没有使用性能模式正确检测的对象时是否打印日志文件跟踪。
在MySQL 8.0.17中添加。
lock_order_trace_missing_unlock
:当LOCK_ORDER工具遇到仍然保持时销毁的锁时,是否打印日志文件跟踪。
在MySQL 8.0.17中添加。
log_error_filter_rules
:筛选错误日志记录的规则。
在MySQL 8.0.2中添加。
log_error_services
:用于错误记录的组件。
在MySQL 8.0.2中添加。
log_error_suppression_list
:要禁止的警告/信息错误日志消息。
在MySQL 8.0.13中添加。
log_slow_extra
:是否将额外信息写入慢速查询日志文件。
在MySQL 8.0.14中添加。
mandatory_roles
:自动为所有用户授予角色。
在MySQL 8.0.2中添加。
mysql_firewall_mode
:MySQL Enterprise Firewall是否可以运行。
在MySQL 8.0.11中添加。
mysql_firewall_trace
:是否启用防火墙跟踪。
在MySQL 8.0.11中添加。
mysqlx
:是否初始化X插件。
在MySQL 8.0.11中添加。
mysqlx_interactive_timeout
:等待交互式客户端超时的秒数。
在MySQL 8.0.4中添加。
mysqlx_read_timeout
:等待阻止读取操作完成的秒数。
在MySQL 8.0.4中添加。
mysqlx_wait_timeout
:等待连接活动的秒数。
在MySQL 8.0.4中添加。
mysqlx_write_timeout
:等待阻止写入操作完成的秒数。
在MySQL 8.0.4中添加。
named_pipe_full_access_group
:授予对命名管道的完全访问权限的Windows组的名称。
在MySQL 8.0.14中添加。
no-dd-upgrade
:防止在启动时自动升级数据字典表。
在MySQL 8.0.4中添加。
no-monitor
:不要分叉RESTART所需的监视进程。
在MySQL 8.0.12中添加。
original_commit_timestamp
:在原始主服务器上提交事务的时间。
在MySQL 8.0.1中添加。
original_server_version
:最初提交事务的服务器的MySQL Server版本号。
在MySQL 8.0.14中添加。
partial_revokes
:是否启用了部分撤销。
在MySQL 8.0.16中添加。
password_history
:密码重用之前所需的密码更改次数。
在MySQL 8.0.3中添加。
password_require_current
:密码更改是否需要当前密码验证。
在MySQL 8.0.13中添加。
password_reuse_interval
:密码重用之前所需的天数。
在MySQL 8.0.3中添加。
performance_schema_max_digest_sample_age
:查询以秒为单位重新采样年龄。
在MySQL 8.0.3中添加。
persist_only_admin_x509_subject
:SSL证书X.509启用持久限制的系统变量的主题。
在MySQL 8.0.14中添加。
persisted_globals_load
:是否加载持久配置设置。
在MySQL 8.0.0中添加。
print_identified_with_as_hex
:对于SHOW CREATE USER,打印包含十六进制不可打印字符的哈希值。
在MySQL 8.0.17中添加。
regexp_stack_limit
:正则表达式匹配堆栈大小限制。
在MySQL 8.0.4中添加。
regexp_time_limit
:正则表达式匹配超时。
在MySQL 8.0.4中添加。
resultset_metadata
:服务器是否返回结果集元数据。
在MySQL 8.0.3中添加。
rpl_read_size
:设置从二进制日志文件和中继日志文件中读取的最小数据量(以字节为单位)。
在MySQL 8.0.11中添加。
secondary_engine_cost_threshold
:供将来使用。
在MySQL 8.0.16中添加。
show_create_table_verbosity
:是否在SHOW CREATE TABLE中显示ROW_FORMAT,即使它具有默认值。
在MySQL 8.0.11中添加。
sql_require_primary_key
:表是否必须具有主键。
在MySQL 8.0.13中添加。
ssl_fips_mode
:是否在服务器端启用FIPS模式。
在MySQL 8.0.11中添加。
syseventlog.facility
:系统日志消息的工具。
在MySQL 8.0.13中添加。
syseventlog.include_pid
:是否在syslog消息中包含服务器PID。
在MySQL 8.0.13中添加。
syseventlog.tag
:标记syslog消息中的服务器标识符。
在MySQL 8.0.13中添加。
table_encryption_privilege_check
:启用TABLE_ENCRYPTION_ADMIN权限检查。
在MySQL 8.0.16中添加。
temptable_max_ram
:定义数据存储在磁盘上之前TempTable存储引擎可占用的最大内存量。
在MySQL 8.0.2中添加。
temptable_use_mmap
:定义TempTable存储引擎在达到temptable_max_ram阈值时是否分配内存映射文件。在MySQL 8.0.16中添加。
thread_pool_algorithm
:线程池算法。
在MySQL 8.0.11中添加。
thread_pool_high_priority_connection
:当前会话是否为高优先级。
在MySQL 8.0.11中添加。
thread_pool_max_unused_threads
:允许的最大未使用线程数。
在MySQL 8.0.11中添加。
thread_pool_prio_kickup_timer
:将语句移动到高优先级执行之前多长时间。
在MySQL 8.0.11中添加。
thread_pool_size
:线程池中的线程组数。
在MySQL 8.0.11中添加。
thread_pool_stall_limit
:声明被定义为停滞多久之前。
在MySQL 8.0.11中添加。
tls_ciphersuites
:允许加密连接的TLSv1.3密码套件。
在MySQL 8.0.16中添加。
upgrade
:启动时控制自动升级。
在MySQL 8.0.16中添加。
use_secondary_engine
:供将来使用。
在MySQL 8.0.13中添加。
validate-config
:验证服务器配置。
在MySQL 8.0.16中添加。
validate_password.check_user_name
:是否根据用户名检查密码。
在MySQL 8.0.4中添加。
validate_password.dictionary_file
:validate_password字典文件。
在MySQL 8.0.4中添加。
validate_password.dictionary_file_last_parsed
:上次解析字典文件时。
在MySQL 8.0.4中添加。
validate_password.dictionary_file_words_count
:字典文件中的单词数。
在MySQL 8.0.4中添加。
validate_password.length
:validate_password所需的密码长度。
在MySQL 8.0.4中添加。
validate_password.mixed_case_count
:validate_password必需的大写/小写字符数。
在MySQL 8.0.4中添加。
validate_password.number_count
:validate_password必需的数字字符数。
在MySQL 8.0.4中添加。
validate_password.policy
:validate_password密码策略。
在MySQL 8.0.4中添加。
validate_password.special_char_count
:validate_password必需的特殊字符数。
在MySQL 8.0.4中添加。
version_compile_zlib
:已编译的zlib库的版本。
在MySQL 8.0.11中添加。
windowing_use_high_precision
:是否以高精度计算窗口函数。
在MySQL 8.0.2中添加。
MySQL 8.0中不推荐使用以下系统变量,状态变量和选项。
expire_logs_days
:在这么多天之后清除二进制日志。
从MySQL 8.0.3开始不推荐使用。
innodb_undo_tablespaces
:回滚段之间划分的表空间文件数。
从MySQL 8.0.4开始不推荐使用。
log_syslog
:是否将错误日志写入syslog。
从MySQL 8.0.2开始不推荐使用。
no-dd-upgrade
:防止在启动时自动升级数据字典表。
自MySQL 8.0.16起不推荐使用。
symbolic-links
:允许MyISAM表的符号链接。
从MySQL 8.0.2开始不推荐使用。
MySQL 8.0中删除了以下系统变量,状态变量和选项。
Com_alter_db_upgrade
:ALTER DATABASE计数...升级数据目录名称语句。
在MySQL 8.0.0中删除。
Innodb_available_undo_logs
:显示InnoDB回滚段的总数;
与innodb_rollback_segments不同,后者显示活动回滚段的数量。
在MySQL 8.0.2中删除。
Qcache_free_blocks
:查询缓存中的可用内存块数。
在MySQL 8.0.3中删除。
Qcache_free_memory
:查询缓存的可用内存量。
在MySQL 8.0.3中删除。
Qcache_hits
:查询缓存命中数。
在MySQL 8.0.3中删除。
Qcache_inserts
:查询缓存插入的数量。
在MySQL 8.0.3中删除。
Qcache_lowmem_prunes
:由于缓存中缺少可用内存而从查询缓存中删除的查询数。
在MySQL 8.0.3中删除。
Qcache_not_cached
:非缓存查询的数量(由于query_cache_type设置,不可缓存或未缓存)。
在MySQL 8.0.3中删除。
Qcache_queries_in_cache
:查询缓存中注册的查询数。
在MySQL 8.0.3中删除。
Qcache_total_blocks
:查询缓存中的块总数。
在MySQL 8.0.3中删除。
Slave_heartbeat_period
:从属的复制心跳间隔,以秒为单位。
在MySQL 8.0.1中删除。
Slave_last_heartbeat
:以TIMESTAMP格式显示收到最新心跳信号的时间。
在MySQL 8.0.1中删除。
Slave_received_heartbeats
:自上次重置以来复制从站接收的心跳数。
在MySQL 8.0.1中删除。
Slave_retried_transactions
:自启动以来复制从属SQL线程已重试事务的总次数。
在MySQL 8.0.1中删除。
Slave_running
:此服务器的状态为复制从属(从属I / O线程状态)。
在MySQL 8.0.1中删除。
bootstrap
:由mysql安装脚本使用。
在MySQL 8.0.0中删除。
date_format
:DATE格式(未使用)。
在MySQL 8.0.3中删除。
datetime_format
:DATETIME / TIMESTAMP格式(未使用)。
在MySQL 8.0.3中删除。
des-key-file
:从给定文件加载des_encrypt()和des_encrypt的密钥。
在MySQL 8.0.3中删除。
group_replication_allow_local_disjoint_gtids_join
:允许当前服务器加入该组,即使该组中没有事务。
在MySQL 8.0.4中删除。
have_crypt
:crypt()系统调用的可用性。
在MySQL 8.0.3中删除。
ignore-builtin-innodb
:忽略内置的InnoDB。
在MySQL 8.0.3中删除。
ignore-db-dir
:将目录视为非数据库目录。
在MySQL 8.0.0中删除。
ignore_db_dirs
:目录被视为非数据库目录。
在MySQL 8.0.0中删除。
innodb_checksums
:启用InnoDB校验和验证。
在MySQL 8.0.0中删除。
innodb_disable_resize_buffer_pool_debug
:禁用InnoDB缓冲池的大小调整。
在MySQL 8.0.0中删除。
innodb_file_format
:新InnoDB表的格式。
在MySQL 8.0.0中删除。
innodb_file_format_check
:InnoDB是否执行文件格式兼容性检查。
在MySQL 8.0.0中删除。
innodb_file_format_max
:共享表空间中的文件格式标记。
在MySQL 8.0.0中删除。
innodb_large_prefix
:为列前缀索引启用更长的键。
在MySQL 8.0.0中删除。
innodb_locks_unsafe_for_binlog
:强制InnoDB不使用下一键锁定。
而是仅使用行级锁定。
在MySQL 8.0.0中删除。
innodb_scan_directories
:定义在InnoDB恢复期间扫描表空间文件的目录。
在MySQL 8.0.4中删除。
innodb_stats_sample_pages
:要为索引分布统计信息进行采样的索引页数。
在MySQL 8.0.0中删除。
innodb_support_xa
:为XA两阶段提交启用InnoDB支持。
在MySQL 8.0.0中删除。
innodb_undo_logs
:定义InnoDB使用的撤消日志(回滚段)的数量;
innodb_rollback_segments的别名。
在MySQL 8.0.2中删除。
internal_tmp_disk_storage_engine
:内部临时表的存储引擎。
在MySQL 8.0.16中删除。
log-warnings
:将一些非关键警告记录到日志文件中。
在MySQL 8.0.3中删除。
log_builtin_as_identified_by_password
:是否以向后兼容的方式记录CREATE / ALTER USER,GRANT。
在MySQL 8.0.11中删除。
log_error_filter_rules
:筛选错误日志记录的规则。
在MySQL 8.0.4中删除。
log_syslog
:是否将错误日志写入syslog。
在MySQL 8.0.13中删除。
log_syslog_facility
:系统日志消息的工具。
在MySQL 8.0.13中删除。
log_syslog_include_pid
:是否在syslog消息中包含服务器PID。
在MySQL 8.0.13中删除。
log_syslog_tag
:标记syslog消息中的服务器标识符。
在MySQL 8.0.13中删除。
max_tmp_tables
: 没用过。
在MySQL 8.0.3中删除。
metadata_locks_cache_size
:元数据的大小锁定缓存。
在MySQL 8.0.13中删除。
metadata_locks_hash_instances
:元数据锁定哈希值的数量。
在MySQL 8.0.13中删除。
multi_range_count
:范围选择期间一次发送到表处理程序的最大范围数。
在MySQL 8.0.3中删除。
old_passwords
:为PASSWORD()选择密码哈希方法。
在MySQL 8.0.11中删除。
partition
:启用(或禁用)分区支持。
在MySQL 8.0.0中删除。
query_cache_limit
:不要缓存大于此的结果。
在MySQL 8.0.3中删除。
query_cache_min_res_unit
:分配结果空间的最小单位大小(在写入所有结果数据后将修剪最后一个单位)。
在MySQL 8.0.3中删除。
query_cache_size
:分配用于存储旧查询结果的内存。
在MySQL 8.0.3中删除。
query_cache_type
:查询缓存类型。
在MySQL 8.0.3中删除。
query_cache_wlock_invalidate
:在LOCK上查询缓存中的查询无效以进行写入。
在MySQL 8.0.3中删除。
secure-auth
:禁止对具有旧(4.1之前)密码的帐户进行身份验证。
在MySQL 8.0.3中删除。
show_compatibility_56
:SHOW STATUS / VARIABLES的兼容性。
在MySQL 8.0.1中删除。
skip-partition
:不要启用用户定义的分区。
在MySQL 8.0.0中删除。
sync_frm
:在创建时将.frm同步到磁盘。
默认情况下启用。
在MySQL 8.0.0中删除。
temp-pool
:使用此选项将导致创建的大多数临时文件使用一小组名称,而不是每个新文件的唯一名称。
在MySQL 8.0.1中删除。
time_format
:TIME格式(未使用)。
在MySQL 8.0.3中删除。
tx_isolation
:默认事务隔离级别。
在MySQL 8.0.3中删除。
tx_read_only
:默认事务访问模式。
在MySQL 8.0.3中删除。
本节列出了您可能会发现有用的其他信息的来源,例如MySQL网站,邮件列表,用户论坛和Internet中继聊天。
MySQL文档的主要网站是 https://dev.mysql.com/doc/ 。 在线和可下载的文档格式可用于MySQL参考手册,MySQL连接器等。
MySQL开发人员提供有关 MySQL服务器博客的 新功能和即将推出的功能的信息 。
本节介绍MySQL邮件列表,并提供有关如何使用列表的指南。 当您订阅邮件列表时,您会收到列表中的所有帖子作为电子邮件。 您也可以将自己的问题和答案发送到列表中。
要订阅或取消订阅本节中描述的任何邮件列表,请访问 http://lists.mysql.com/ 。 对于大多数用户,您可以选择获取单个邮件的列表的常规版本,或者每天收到一封大邮件的摘要版本。
请 不要 发送有关订阅或取消订阅任何邮件列表的消息,因为此类消息会自动分发给数千名其他用户。
您的本地站点可能有许多MySQL邮件列表的订阅者。
如果是这样,该站点可能具有本地邮件列表,以便从
lists.mysql.com
您的站点
发送的邮件
传播到本地列表。
在这种情况下,请与您的系统管理员联系,以添加到本地MySQL列表或从本地MySQL列表中删除。
要使邮件列表的流量转到邮件程序中的单独邮箱,请根据邮件头设置过滤器。
您可以使用
List-ID:
或
Delivered-To:
标题来标识列表消息。
MySQL邮件列表如下:
announce
新版MySQL及相关程序的公告列表。 这是一个所有MySQL用户都应订阅的低容量列表。
mysql
一般MySQL讨论的主要列表。 请注意,在更专业的列表中更好地讨论了一些主题。 如果您发布到错误的列表,您可能无法得到答案。
bugs
希望随时了解自上次发布MySQL以来所报告的问题或希望积极参与错误搜索和修复过程的人员列表。 请参见 第1.7节“如何报告错误或问题” 。
internals
处理MySQL代码的人员列表。 这也是讨论MySQL开发和发布补丁的论坛。
mysqldoc
处理MySQL文档的人员列表。
benchmarks
任何对性能问题感兴趣的人的清单。 讨论主要集中在数据库性能(不仅限于MySQL)上,还包括更广泛的类别,如内核性能,文件系统,磁盘系统等。
packagers
有关打包和分发MySQL的讨论列表。 这是分发维护者用来交换包装MySQL的想法以及确保MySQL在所有支持的平台和操作系统上看起来和感觉尽可能相似的论坛。
java
有关MySQL服务器和Java的讨论列表。 它主要用于讨论JDBC驱动程序,如MySQL Connector / J.
win32
有关Microsoft操作系统上MySQL软件的所有主题的列表,例如Windows 9x,Me,NT,2000,XP和2003。
myodbc
有关使用ODBC连接MySQL服务器的所有主题的列表。
gui-tools
有关MySQL图形用户界面工具(如MySQL Workbench)的所有主题的列表。
cluster
讨论MySQL Cluster的列表。
dotnet
讨论MySQL服务器和.NET平台的列表。 它主要与MySQL Connector / NET有关。
plusplus
有关使用C ++ API for MySQL进行编程的所有主题的列表。
perl
有关Perl支持MySQL的所有主题的列表
DBD::mysql
。
如果您无法从MySQL邮件列表或论坛中获得问题的答案,则可以选择从Oracle购买支持。 这使您直接与MySQL开发人员联系。
以下MySQL邮件列表使用英语以外的语言。 这些列表不由Oracle运营。
<mysql-france-subscribe@yahoogroups.com>
法国邮件列表。
韩国邮件列表。
要订阅,请发送电子邮件
subscribe
mysql your@email.address
至此列表。
<mysql-de-request@lists.4t2.com>
德国邮件列表。
要订阅,请发送电子邮件
subscribe
mysql-de your@email.address
至此列表。
您可以在
http://www.4t2.com/mysql/
找到有关此邮件列表的
信息
。
<mysql-br-request@listas.linkway.com.br>
葡萄牙邮件列表。
要订阅,请发送电子邮件
subscribe mysql-br your@email.address
至此列表。
西班牙邮件列表。
要订阅,请发送电子邮件
subscribe
mysql your@email.address
至此列表。
http://forums.mysql.com 上的 论坛 是一个重要的社区资源。 许多论坛都可用,分为以下常规类别:
移民
MySQL用法
MySQL连接器
编程语言
工具
第三方应用程序
存储引擎
MySQL技术
SQL标准
商业
除了各种MySQL邮件列表和论坛,您还可以在Internet Relay Chat(IRC)上找到经验丰富的社区人员。 这些是我们目前所知的最佳网络/频道:
freenode (请参阅 http://www.freenode.net/ 了解服务器)
#mysql
主要用于MySQL问题,但欢迎其他数据库和一般SQL问题。
关于PHP,Perl或C与MySQL结合的问题也很常见。
#workbench
主要针对MySQL Workbench相关的问题和想法,它也是一个满足MySQL Workbench开发人员的好地方。
Oracle以MySQL Enterprise的形式提供技术支持。 对于依赖MySQL DBMS进行业务关键型生产应用程序的组织,MySQL Enterprise是一种商业订阅产品,包括:
MySQL企业服务器
MySQL企业监控器
每月快速更新和季度服务包
MySQL知识库
全天候技术和咨询支持
MySQL Enterprise提供多层,使您可以灵活地选择最符合您需求的服务级别。 有关更多信息,请参阅 MySQL Enterprise 。
在发布有关问题的错误报告之前,请尝试验证它是否存在错误,并且尚未报告错误:
首先在 https://dev.mysql.com/doc/上 搜索MySQL在线手册 。 我们尝试通过解决新发现的问题来经常更新手册,以使手册保持最新。 此外,本手册附带的发行说明特别有用,因为新版本很可能包含解决您问题的方法。 发行说明可在手册中给出的位置获得。
如果您收到SQL语句的解析错误,请仔细检查您的语法。 如果您找不到它的错误,您的当前版本的MySQL服务器很可能不支持您正在使用的语法。 如果您使用的是当前版本,并且本手册未涵盖您使用的语法,则MySQL Server不支持您的语句。
如果手册涵盖了您正在使用的语法,但您使用的是旧版MySQL服务器,则应检查MySQL更改历史记录以查看语法的实现时间。 在这种情况下,您可以选择升级到较新版本的MySQL Server。
有关常见问题的解决方案,请参见 第B.4节“问题和常见错误” 。
搜索 http://bugs.mysql.com/ 上 的错误数据库, 查看是否已报告并修复了错误。
在 http://lists.mysql.com/上 搜索MySQL邮件列表存档 。 请参见 第1.6.2节“MySQL邮件列表” 。
您还可以使用 http://www.mysql.com/search/ 搜索位于MySQL网站的所有网页(包括手册)。
如果您在手册,错误数据库或邮件列表存档中找不到答案,请咨询您当地的MySQL专家。 如果您仍无法找到问题的答案,请使用以下指南报告错误。
报告错误的常规方法是访问 http://bugs.mysql.com/ ,这是我们的错误数据库的地址。 该数据库是公开的,任何人都可以浏览和搜索。 如果您登录系统,则可以输入新报告。
发布说明中注明了 在 http://bugs.mysql.com/ 的错误数据库中 发布的针对给定版本进行了更正 的错误 。
如果您在MySQL服务器中发现敏感的安全漏洞,请立即通过发送电子邮件告知我们
。
例外:支持客户应在
http://support.oracle.com/上
向Oracle支持部门报告所有问题,包括安全漏洞
。
<secalert_us@oracle.com>
要讨论其他用户的问题,您可以使用其中一个MySQL邮件列表。 第1.6.2节“MySQL邮件列表” 。
编写一个好的错误报告需要耐心,但是第一次做正确的事情可以为我们和你自己节省时间。 一个好的错误报告,包含错误的完整测试用例,使我们很有可能在下一个版本中修复错误。 本节可以帮助您正确地编写报告,这样您就不会浪费时间做一些可能对我们没有多大帮助的事情。 请仔细阅读本节,并确保此处描述的所有信息都包含在您的报告中。
最好在发布之前使用最新的MySQL服务器生产版或开发版测试问题。
任何人都应该能够通过使用
mysql test <
script_file
您的测试用例或运行您在错误报告中包含的shell或Perl脚本
来重复该错误
。
我们能够重复的任何错误很有可能在下一个MySQL版本中被修复。
当错误报告中包含对问题的良好描述时,它会非常有用。 也就是说,给出一个很好的例子,说明你所做的一切导致了问题,并详细描述了问题本身。 最好的报告包括一个完整的例子,显示如何重现错误或问题。 请参见 第29.5节“调试和移植MySQL” 。
请记住,我们可以回复包含太多信息的报告,但不能回复包含太少信息的报告。 人们经常忽略事实,因为他们认为他们知道问题的原因并假设某些细节无关紧要。 一个好的原则是,如果你对陈述某事有疑问,请说出来。 如果我们必须要求您提供初始报告中缺少的信息,那么在报告中写几行更快,更麻烦,而不是等待更长时间的答案。
错误报告中最常见的错误是(a)不包括您使用的MySQL发行版的版本号,以及(b)没有完全描述安装MySQL服务器的平台(包括平台类型和版本号) 。 这些是高度相关的信息,在100个中的99个案例中,如果没有它们,错误报告就毫无用处。 我们经常会遇到这样的问题: “ 为什么这对我不起作用? ” 然后我们发现请求的功能没有在MySQL版本中实现,或者报告中描述的错误已在较新的MySQL版本中得到修复。 错误通常与平台有关。 在这种情况下,我们几乎不可能在不知道操作系统和平台版本号的情况下修复任何问题。
如果您从源代码编译MySQL,请记住还提供有关编译器的信息,如果它与问题有关。 通常人们会在编译器中发现错误,并认为问题与MySQL有关。 大多数编译器一直在开发中,并且逐个版本变得更好。 要确定您的问题是否取决于您的编译器,我们需要知道您使用的编译器。 请注意,每个编译问题都应视为错误并进行相应报告。
如果程序产生错误消息,则在报告中包含该消息非常重要。 如果我们尝试从档案中搜索某些内容,则报告的错误消息最好与程序生成的错误消息匹配。 (甚至应该遵守字母。)最好将整个错误消息复制并粘贴到报告中。 您永远不应该尝试从内存中重现该消息。
如果您遇到Connector / ODBC(MyODBC)问题,请尝试生成跟踪文件并将其与报告一起发送。 请参见 如何报告连接器/ ODBC问题或错误 。
如果您的报告包含使用
mysql
命令行工具
运行的测试用例的长查询输出行
,则可以使用
--vertical
选项或
\G
语句终止符
使输出更具可读性
。
EXPLAIN
SELECT
本节后面
的
示例演示了如何使用
\G
。
请在报告中包含以下信息:
您正在使用的MySQL发行版的版本号(例如,MySQL 5.7.10)。
您可以通过执行
mysqladmin版本
找到您正在运行的
版本
。
该
中mysqladmin
程序可以在找到
bin
你的MySQL安装目录下的目录。
您遇到问题的机器的制造商和型号。
操作系统名称和版本。
如果您使用Windows,通常可以通过双击“我的电脑”图标并下拉
“
帮助/关于Windows
”
菜单
来获取名称和版本号
。
对于大多数类Unix操作系统,您可以通过执行命令获取此信息
uname -a
。
有时内存量(真实和虚拟)是相关的。 如有疑问,请包含这些值。
docs/INFO_BIN
MySQL安装文件
的内容
。
此文件包含有关如何配置和编译MySQL的信息。
如果您使用的是MySQL软件的源代码分发,请包含您使用的编译器的名称和版本号。 如果您有二进制分发,请包含分发名称。
如果在编译期间出现问题,请在发生错误的文件中包含确切的错误消息以及围绕违规代码的几行上下文。
如果 mysqld 死了,你还应该报告崩溃 mysqld 的声明 。 您通常可以通过在 启用查询日志记录的 情况下运行 mysqld 来获取此信息 ,然后在 mysqld 崩溃 后查看日志 。 请参见 第29.5节“调试和移植MySQL” 。
如果数据库表与问题相关,请
在错误报告中
包含
语句
的输出
。
这是获取数据库中任何表的定义的一种非常简单的方法。
这些信息有助于我们创建与您所经历的情境相匹配的情境。
SHOW CREATE TABLE
db_name
.tbl_name
发生问题时生效的SQL模式可能很重要,因此请报告
sql_mode
系统变量
的值
。
对于存储过程,存储函数和触发器对象,相关
sql_mode
值是创建对象时有效的值。
对于存储过程或函数,
SHOW CREATE
PROCEDURE
or
SHOW CREATE
FUNCTION
语句显示相关的SQL模式,或者您可以查询
INFORMATION_SCHEMA
信息:
SELECT ROUTINE_SCHEMA,ROUTINE_NAME,SQL_MODE FROM INFORMATION_SCHEMA.ROUTINES;
对于触发器,您可以使用以下语句:
SELECT EVENT_OBJECT_SCHEMA,EVENT_OBJECT_TABLE,TRIGGER_NAME,SQL_MODE FROM INFORMATION_SCHEMA.TRIGGERS;
对于与性能相关的错误或
SELECT
语句
问题
,应始终包括语句的输出
EXPLAIN SELECT
...
,以及至少包含该
SELECT
语句生成
的行数
。
您还应该包含所
涉及的每个表
的输出
。
您提供的有关您的情况的信息越多,有人可以帮助您的可能性就越大。
SHOW CREATE TABLE
tbl_name
以下是一个非常好的错误报告的示例。
使用
mysql
命令行工具
运行语句
。
请注意
\G
语句终止符用于语句,否则这些语句将提供难以阅读的非常长的输出行。
mysql>SHOW VARIABLES;
mysql> mysql> mysql> mysql> mysql>SHOW COLUMNS FROM ...\G
<output from SHOW COLUMNS>
EXPLAIN SELECT ...\G
<output from EXPLAIN>
FLUSH STATUS;
SELECT ...;
<A short version of the output from SELECT, including the time taken to run the query>
SHOW STATUS;
<output from SHOW STATUS>
如果在运行 mysqld 时出现错误或问题 ,请尝试提供重现异常的输入脚本。 此脚本应包含任何必需的源文件。 脚本越能重现您的情况越好。 如果您可以制作可重现的测试用例,则应将其上载以附加到错误报告中。
如果您无法提供脚本,则至少应在报告中包含 mysqladmin variables extended-status processlist 的输出, 以提供有关系统性能的一些信息。
如果您不能生成只有几行的测试用例,或者测试表太大而无法包含在错误报告中(超过10行),则应使用
mysqldump
转储表
并创建
README
描述问题
的
文件。
使用
tar
和
gzip
或
zip
创建文件的压缩存档
。
在
http://bugs.mysql.com/上
为我们的错误数据库启动错误报告后
,单击错误报告中的“文件”选项卡,获取有关将存档上载到错误数据库的说明。
如果您认为MySQL服务器从语句中产生奇怪的结果,不仅包括结果,还包括您对结果应该是什么的看法,以及描述您的意见基础的解释。
当您提供问题的示例时,最好使用实际情况中存在的表名,变量名等,而不是提出新名称。 问题可能与表或变量的名称有关。 这些情况很少见,但是安全比抱歉更好。 毕竟,你应该更容易提供一个使用你的实际情况的例子,这对我们来说更好。 如果您有错误报告中不希望其他人看到的数据,您可以使用“文件”选项卡上传它,如前所述。 如果这些信息真的是绝密的,你甚至不想向我们展示,请继续使用其他名称提供一个例子,
如果可能,包括给予相关计划的所有选项。
例如,指出启动
mysqld
服务器
时使用的选项,
以及用于运行任何MySQL客户端程序的选项。
mysqld
和
mysql
等程序的选项
,以及
configure
脚本,通常是解决问题的关键,非常重要。
包含它们绝不是一个坏主意。
如果您的问题涉及用Perl或PHP等语言编写的程序,请包括语言处理器的版本号,以及程序使用的任何模块的版本。
例如,如果您有一个使用
DBI
和
DBD::mysql
模块
的Perl脚本
,请包含Perl的版本号
DBI
,和
DBD::mysql
。
如果您的问题与权限系统有关,请包括 mysqladmin reload 的输出 以及尝试连接时获得的所有错误消息。 当您测试权限时,您应该执行 mysqladmin reload version 并尝试连接给您带来麻烦的程序。
如果你有一个bug补丁,请包含它。 但是,如果您没有提供一些必要的信息,例如显示修补程序修复的错误的测试用例,请不要认为补丁是我们所需要的,或者我们可以使用它。 我们可能会发现您的补丁有问题,或者我们可能根本不理解它。 如果是这样,我们就不能使用它。
如果我们无法验证补丁的确切用途,我们将不会使用它。 测试用例可以帮助我们。 显示修补程序处理可能发生的所有情况。 如果我们发现一个边界情况(甚至是一个罕见的情况)补丁将无法工作,它可能是无用的。
猜测错误是什么,它发生的原因或它依赖的通常是错误的。 即使MySQL团队在没有首先使用调试器来确定错误的真正原因的情况下也无法猜测这些事情。
在您的错误报告中指出您已检查参考手册和邮件存档,以便其他人知道您已尝试自己解决问题。
如果您的数据显示已损坏或在访问特定表时出现错误,请首先检查您的表
CHECK
TABLE
。
如果该语句报告任何错误:
该
InnoDB
故障恢复机制处理清理服务器时被杀害后重新开始,所以在典型的操作没有必要
“
修复
”
表。
如果遇到
InnoDB
表
错误
,请重新启动服务器并查看问题是否仍然存在,或者错误是否仅影响内存中的缓存数据。
如果磁盘上的数据已损坏,请考虑在
innodb_force_recovery
启用
该
选项的情况下
重新启动,
以便您可以转储受影响的表。
对于非事务性表,请尝试
REPAIR
TABLE
使用
myisamchk
或使用
myisamchk
进行修复
。
请参见
第5章,
MySQL服务器管理
。
如果您运行的是Windows,请验证
lower_case_table_names
使用该
SHOW VARIABLES LIKE
'lower_case_table_names'
语句
的值
。
此变量影响服务器处理数据库和表名称的字母大写的方式。
它对给定值的影响应如
第9.2.2节“标识符区分大小写”中所述
。
如果您经常遇到损坏的表,您应该尝试找出这种情况发生的时间和原因。
在这种情况下,MySQL数据目录中的错误日志可能包含有关发生的事情的一些信息。
(这是
.err
名称中
带有
后缀
的文件
。)请参见
第5.4.2节“错误日志”
。
请在错误报告中包含此文件中的所有相关信息。
通常情况下
的mysqld
应该
从来没有
崩溃的表,如果没有在更新过程中把它打死了。
如果你能找到
mysqld
死亡
的原因,
我们就可以更容易地为你解决这个问题。
看到
第B.4.1节“如何确定导致问题的原因”
。
如果可能,请下载并安装最新版本的MySQL Server,并检查它是否能解决您的问题。 所有版本的MySQL软件都经过全面测试,应该可以正常运行。 我们相信尽可能地使所有内容都向后兼容,并且您应该能够毫无困难地切换MySQL版本。 请参见 第2.1.1节“要安装的MySQL版本和分发版本” 。
本节描述MySQL如何与ANSI / ISO SQL标准相关。 MySQL Server有许多SQL标准的扩展,在这里你可以找到它们是什么以及如何使用它们。 您还可以找到有关MySQL Server缺少的功能的信息,以及如何解决一些差异。
SQL标准自1986年以来一直在发展,并且存在多个版本。 在本手册中, “ SQL-92 ” 是指1992年发布的标准。 “ SQL:1999 ” , “ SQL:2003 ” , “ SQL:2008 ” 和 “ SQL:2011 ” 是指发布的标准版本相应的年份,最后一个版本是最新版本。 我们使用短语 “ SQL标准 ” 或 “ 标准SQL ” 在任何时候表示当前版本的SQL标准。
我们对该产品的主要目标之一是继续努力遵守SQL标准,但不会牺牲速度或可靠性。
我们不怕添加SQL扩展或支持非SQL功能,如果这大大增加了MySQL服务器对我们用户群的大部分可用性。
该
HANDLER
接口是这一战略的一个例子。
请参见
第13.2.4节“HANDLER语法”
。
我们继续支持事务性和非事务性数据库,以满足关键任务24/7使用和繁重的Web或日志记录使用。
MySQL Server最初设计用于在小型计算机系统上使用中型数据库(1000万-100万行,或每个表约100MB)。 今天MySQL服务器处理TB级数据库。
虽然MySQL复制功能提供了重要的功能,但我们并未针对实时支持。
MySQL支持ODBC级别0到3.51。
MySQL支持使用
NDBCLUSTER
存储引擎进行
高可用性数据库集群
。
请参见
第22章,
MySQL NDB Cluster 8.0
。
我们实现支持大多数W3C XPath标准的XML功能。 请参见 第12.11节“XML函数” 。
MySQL支持RFC 7159定义的原生JSON数据类型,并基于ECMAScript标准(ECMA-262)。 请参见 第11.6节“JSON数据类型” 。 MySQL还实现了SQL:2016标准的预发布草案所指定的SQL / JSON函数的子集; 有关更多信息 , 请参见 第12.17节“JSON函数” 。
MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于
sql_mode
系统变量
的值
。
DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且每个应用程序可以将其会话SQL模式设置为其自己的要求。
模式会影响MySQL支持的SQL语法以及它执行的数据验证检查。 这使得在不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。
有关设置SQL模式的更多信息,请参见 第5.1.11节“服务器SQL模式” 。
要在ANSI模式下运行MySQL Server,请
使用该
选项
启动
mysqld
--ansi
。
以ANSI模式运行服务器与使用以下选项启动服务器相同:
--transaction-isolation = SERIALIZABLE --sql-mode = ANSI
要在运行时实现相同的效果,请执行以下两个语句:
设定全球交易隔离级别可串行化; SET GLOBAL sql_mode ='ANSI';
您可以看到设置
sql_mode
系统变量以
'ANSI'
启用与ANSI模式相关的所有SQL模式选项,如下所示:
mysql>SET GLOBAL sql_mode='ANSI';
mysql>SELECT @@GLOBAL.sql_mode;
- >'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'
以ANSI模式运行服务器与
--ansi
设置SQL模式不完全相同,
'ANSI'
因为该
--ansi
选项还设置了事务隔离级别。
请参见 第5.1.7节“服务器命令选项” 。
MySQL Server支持一些您可能在其他SQL DBMS中找不到的扩展。 请注意,如果您使用它们,您的代码将无法移植到其他SQL服务器。 在某些情况下,您可以使用以下格式的注释编写包含MySQL扩展的代码,但仍可移植。
/ *!MySQL-specific code
* /
在这种情况下,MySQL Server会像在任何其他SQL语句中那样解析和执行注释中的代码,但其他SQL服务器将忽略这些扩展。
例如,MySQL Server
STRAIGHT_JOIN
在以下语句中
识别
关键字,但其他服务器不会:
选择 /*!STRAIGHT_JOIN * / col1 FROM table1,table2 WHERE ...
如果在
!
字符
后添加版本号
,则仅当MySQL版本大于或等于指定的版本号时,才会执行注释中的语法。
KEY_BLOCK_SIZE
以下注释中
的
子句仅由MySQL 5.1.10或更高版本的服务器执行:
CREATE TABLE t1(INT,KEY(a))/ *!50110 KEY_BLOCK_SIZE = 1024 * /;
以下描述列出了按类别组织的MySQL扩展。
磁盘上的数据组织
MySQL Server将每个数据库映射到MySQL数据目录下的目录,并将数据库中的表映射到数据库目录中的文件名。 因此,在具有区分大小写的文件名(例如大多数Unix系统)的操作系统上,MySQL Server中的数据库和表名称区分大小写。 请参见 第9.2.2节“标识符区分大小写” 。
通用语言语法
默认情况下,字符串可以通过封闭
"
和
'
。
如果
ANSI_QUOTES
启用
了
SQL模式,则只能用
'
字符串括起字符串
,
并且服务器会解释由
"
标识符
包围的字符串
。
\
是字符串中的转义字符。
在SQL语句中,您可以使用
db_name.tbl_name
语法
访问来自不同数据库的表
。
一些SQL服务器提供相同的功能,但调用它
User space
。
MySQL服务器不支持像这样的语句中使用的表空间:
CREATE TABLE ralph.my_table ... IN
my_tablespace
。
SQL语句语法
在
ANALYZE
TABLE
,
CHECK
TABLE
,
OPTIMIZE
TABLE
,和
REPAIR
TABLE
语句。
的
CREATE
DATABASE
,
DROP
DATABASE
和
ALTER
DATABASE
语句。
请参见
第13.1.12节“创建数据库语法”
,
第13.1.24节“DROP DATABASE语法”
和
第13.1.2节“ALTER DATABASE语法”
。
该
DO
声明。
EXPLAIN
SELECT
获取查询优化器如何处理表的描述。
该
SET
声明。
请参见
第13.7.5.1节“变量赋值的SET语法”
。
该
SHOW
声明。
请参见
第13.7.6节“显示语法”
。
许多MySQL特定
SHOW
语句
产生的信息
可以通过使用
SELECT
查询
以更标准的方式获得
INFORMATION_SCHEMA
。
请参见
第25章,
INFORMATION_SCHEMA表
。
使用
LOAD
DATA
。
在许多情况下,此语法与Oracle兼容
LOAD
DATA
。
请参见
第13.2.7节“LOAD DATA语法”
。
使用
RENAME
TABLE
。
请参见
第13.1.36节“RENAME TABLE语法”
。
使用
REPLACE
而不是
DELETE
加号
INSERT
。
请参见
第13.2.9节“REPLACE语法”
。
使用的
,
或者
,
或者
在
声明。
使用多个的
,
,
,或
在条款
声明。
请参见
第13.1.9节“ALTER TABLE语法”
。
CHANGE
col_name
DROP
col_name
DROP INDEX
IGNORE
RENAME
ALTER TABLE
ADD
ALTER
DROP
CHANGE
ALTER TABLE
使用索引名称,列前缀的索引以及使用
INDEX
或
KEY
在
CREATE
TABLE
语句中使用。
请参见
第13.1.20节“CREATE TABLE语法”
。
使用
TEMPORARY
或
IF NOT
EXISTS
使用
CREATE
TABLE
。
使用
IF EXISTS
与
DROP
TABLE
和
DROP
DATABASE
。
使用单个
DROP
TABLE
语句
删除多个表的功能
。
INSERT INTO
句法。
tbl_name
SET col_name
= ...
使用
INTO OUTFILE
或
INTO
DUMPFILE
在
SELECT
声明中。
请参见
第13.2.10节“SELECT语法”
。
诸如
STRAIGHT_JOIN
或
SQL_SMALL_RESULT
在
SELECT
陈述中的
选项
。
您无需为
GROUP BY
子句
中的所有选定列命名
。
这为一些非常具体但非常正常的查询提供了更好的性能。
请参见
第12.20节“聚合(GROUP BY)函数”
。
您可以指定
ASC
和
DESC
使用
GROUP
BY
,而不仅仅是
ORDER BY
。
能够使用
:=
赋值运算符
在语句中设置变量
。
请参见
第9.4节“用户定义的变量”
。
数据类型
功能和操作员
为了使从其他SQL环境迁移的用户更容易,MySQL Server支持许多功能的别名。 例如,所有字符串函数都支持标准SQL语法和ODBC语法。
MySQL服务器理解
||
和
&&
运营商当作逻辑OR和AND,如在C编程语言。
在MySQL服务器中,
||
并且
OR
是同义词,因为
&&
和
AND
。
由于这种语法很好,MySQL Server不支持
||
用于字符串连接
的标准SQL
运算符;
使用
CONCAT()
来代替。
因为
CONCAT()
需要任意数量的参数,所以很容易将
||
运算符的
使用转换
为MySQL服务器。
使用
where
有多个元素。
COUNT(DISTINCT
value_list
)value_list
默认情况下,字符串比较不区分大小写,排序顺序由当前字符集的排序规则确定
utf8mb4
,默认情况下。
要执行区分大小写的比较,您应该
BINARY
使用属性
声明列
或使用
BINARY
强制转换,这会导致使用基础字符代码值而不是词法排序进行比较。
该
%
运营商的代名词
MOD()
。
也就是说,
相当于
。
C程序员支持并与PostgreSQL兼容。
N
%
M
MOD(
N
,M
)%
的
=
,
<>
,
<=
,
<
,
>=
,
>
,
<<
,
>>
,
<=>
,
AND
,
OR
,或
LIKE
操作者可以在输出列列表中的表达式中使用(到的左侧
FROM
)的
SELECT
语句。
例如:
MySQL的> SELECT col1=1 AND col2=2 FROM my_table;
该
LAST_INSERT_ID()
函数返回最新
AUTO_INCREMENT
值。
请参见
第12.15节“信息功能”
。
LIKE
允许使用数值。
的
REGEXP
和
NOT REGEXP
扩展正则表达式运算符。
CONCAT()
或者
CHAR()
使用一个参数或两个以上的参数。
(在MySQL Server中,这些函数可以使用可变数量的参数。)
的
BIT_COUNT()
,
CASE
,
ELT()
,
FROM_DAYS()
,
FORMAT()
,
IF()
,
MD5()
,
PERIOD_ADD()
,
PERIOD_DIFF()
,
TO_DAYS()
,和
WEEKDAY()
功能。
使用的
TRIM()
修剪子。
标准SQL仅支持删除单个字符。
该
GROUP BY
功能
STD()
,
BIT_OR()
,
BIT_AND()
,
BIT_XOR()
,和
GROUP_CONCAT()
。
请参见
第12.20节“聚合(GROUP BY)函数”
。
我们尝试使MySQL Server遵循ANSI SQL标准和ODBC SQL标准,但MySQL Server在某些情况下执行不同的操作:
MySQL和标准SQL权限系统之间存在一些差异。
例如,在MySQL中,删除表时不会自动撤消表的权限。
您必须显式发出
REVOKE
语句以撤消表的权限。
有关更多信息,请参见
第13.7.1.8节“REVOKE语法”
。
该
CAST()
函数不支持强制转换为
REAL
或
BIGINT
。
请参见
第12.10节“强制转换函数和运算符”
。
MySQL Server不支持
SELECT ... INTO
TABLE
Sybase SQL扩展。
相反,MySQL Server支持
INSERT
INTO ...
SELECT
标准的SQL语法,这基本上是相同的。
请参见
第13.2.6.1节“INSERT ... SELECT语法”
。
例如:
INSERT INTO tbl_temp2(fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id> 100;
或者,您可以使用
SELECT
... INTO
OUTFILE
或
CREATE
TABLE ...
SELECT
。
您可以使用
SELECT ...
INTO
用户定义的变量。
使用游标和局部变量也可以在存储的例程中使用相同的语法。
请参见
第13.2.10.1节“SELECT ... INTO语法”
。
如果从表中访问要在表达式中更新
UPDATE
的列
,请
使用列的当前值。
以下语句中的第二个赋值设置
col2
为当前(更新的)
col1
值,而不是原始
col1
值。
结果就是
col1
并且
col2
具有相同的值。
此行为与标准SQL不同。
UPDATE t1 SET col1 = col1 + 1,col2 = col1;
外键的MySQL实现在以下关键方面与SQL标准不同:
如果父表中有多个行具有相同的引用键值,则
InnoDB
在外键检查中执行操作,就好像其他具有相同键值的父行不存在一样。
例如,如果已定义
RESTRICT
类型约束,并且存在具有多个父行的子行,
InnoDB
则不允许删除任何这些父行。
InnoDB
基于对应于外键约束的索引中的记录,通过深度优先算法执行级联操作。
一个
FOREIGN KEY
引用了非约束
UNIQUE
关键不是标准的SQL,而是一个
InnoDB
扩展。
如果
ON UPDATE CASCADE
或者
ON
UPDATE SET NULL
recurses更新
它在同一级联中之前更新过的同
一个表
,它就像是一样
RESTRICT
。
这意味着您不能使用自引用
ON UPDATE CASCADE
或
ON UPDATE SET NULL
操作。
这是为了防止级联更新导致的无限循环。
自引用的
ON DELETE SET
NULL
,在另一方面,是可能的,因为是自引用
ON DELETE CASCADE
。
级联操作可能不会嵌套超过15级。
在插入,删除或更新许多行的SQL语句中,逐行检查外键约束(如唯一约束)。
执行外键检查时,
InnoDB
在必须检查的子记录或父记录上设置共享行级锁。
MySQL立即检查外键约束;
检查不会延迟到事务提交。
根据SQL标准,默认行为应该是延迟检查。
也就是说,只有在处理
完整个SQL语句
后才会检查约束
。
这意味着无法使用外键删除引用自身的行。
有关
InnoDB
存储引擎
如何
处理外键的信息,请参见
第15.6.1.5节“InnoDB和FOREIGN KEY约束”
。
标准SQL使用C语法
/* this is a comment
*/
进行注释,MySQL Server也支持此语法。
MySQL还支持对此语法的扩展,使特定于MySQL的SQL能够嵌入到注释中,如
第9.6节“注释语法”中所述
。
标准SQL使用
“
--
”
作为开始注释序列。
MySQL Server
#
用作开始注释字符。
MySQL Server还支持
--
注释样式
的变体
。
也就是说,
--
开始 - 注释序列必须后跟空格(或者通过控制字符,例如换行符)。
该空间是必需的,以防止使用如下结构的自动生成的SQL查询出现问题,我们会自动插入付款值
payment
:
更新帐户SET credit = credit-payment
考虑如果
payment
具有负值
会发生什么,
例如
-1
:
更新帐户SET credit = credit - 1
credit--1
是SQL中的有效表达式,但
--
被解释为注释的开头,表达式的一部分被丢弃。
结果是一个与预期完全不同的语句:
更新帐户SET credit = credit
该声明根本不会产生任何价值变化。
这说明允许评论开始
--
会产生严重后果。
使用我们的实现需要一个空格,
--
以便将它识别为MySQL服务器中的开始注释序列。
因此,
credit--1
使用安全。
另一个安全功能是
mysql
命令行客户端忽略以
--
。
开头的行
。
MySQL使您既可以使用允许回滚的事务表,也可以使用不允许回滚的非事务表。 因此,MySQL中的约束处理与其他DBMS略有不同。 当您在非事务表中插入或更新了大量行时,我们必须处理这种情况,当发生错误时无法回滚更改。
基本原理是MySQL服务器在解析要执行的语句时尝试为它可以检测到的任何内容生成错误,并尝试从执行语句时发生的任何错误中恢复。 我们在大多数情况下这样做,但尚不是全部。
发生错误时MySQL所具有的选项是在中间停止语句或尽可能地从问题中恢复并继续。 默认情况下,服务器遵循后一个过程。 这意味着,例如,服务器可能将无效值强制转换为最接近的有效值。
有几种SQL模式选项可用于更好地控制错误数据值的处理以及是否继续执行语句或在发生错误时中止。 使用这些选项,您可以将MySQL服务器配置为以更传统的方式运行,就像拒绝不正确输入的其他DBMS一样。 可以在服务器启动时全局设置SQL模式以影响所有客户端。 各个客户端可以在运行时设置SQL模式,这使每个客户端都可以选择最适合其要求的行为。 请参见 第5.1.11节“服务器SQL模式” 。
以下部分描述了MySQL Server如何处理不同类型的约束。
通常,数据更改语句(例如
INSERT
或
UPDATE
)会
发生错误,这些语句
会违反主键,唯一键或外键约束。
如果您使用的是事务性存储引擎
InnoDB
,则MySQL会自动回滚该语句。
如果您使用的是非事务性存储引擎,则MySQL会停止处理发生错误的行的语句,并使任何剩余的行保持未处理状态。
MySQL支持的
IGNORE
关键字
INSERT
,
UPDATE
等。
如果您使用它,MySQL会忽略主键或唯一键违规,并继续处理下一行。
请参阅您正在使用的语句部分(
第13.2.6节“INSERT语法”
,
第13.2.12节“UPDATE语法”
等)。
您可以获取有关使用
mysql_info()
C API函数
实际插入或更新的行数的信息
。
您也可以使用该
SHOW
WARNINGS
声明。
请参见
第28.7.7.36节“mysql_info()”
和
第13.7.6.40节“显示警告语法”
。
InnoDB
和
NDB
表支持外键。
请参见
第1.8.3.2节“外键约束”
。
外键允许您跨表交叉引用相关数据, 外键约束 有助于保持这种展开数据的一致性。
MySQL支持
ON UPDATE
和
ON
DELETE
外键的引用
CREATE
TABLE
和
ALTER
TABLE
声明。
可用参照动作
RESTRICT
(默认), ,
CASCADE
,
SET
NULL
和
NO ACTION
。
SET DEFAULT
MySQL服务器也支持,但目前被拒绝为无效
InnoDB
。
由于MySQL不支持延迟约束检查,
NO
ACTION
因此被视为
RESTRICT
。
有关MySQL支持外键的确切语法,请参见
第13.1.20.6节“使用FOREIGN KEY约束”
。
MATCH FULL
,
MATCH
PARTIAL
和
MATCH SIMPLE
被允许,但应避免使用它们,因为它们会导致MySQL服务器忽略
同一语句中使用的
任何
ON DELETE
或
ON UPDATE
子句。
MATCH
选项在MySQL中没有任何其他效果,这实际上强制执行
MATCH
SIMPLE
语义全职。
MySQL要求将外键列编入索引; 如果您创建一个具有外键约束但在给定列上没有索引的表,则会创建一个索引。
您可以从
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
表中
获取有关外键的信息
。
此处显示了针对此表的查询示例:
MySQL的>SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
>FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
>WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+ -------------- + --------------- + ------------- + ---- ------------- + | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | + -------------- + --------------- + ------------- + ---- ------------- + | fk1 | myuser | myuser_id | f | | fk1 | product_order | customer_id | f2 | | fk1 | product_order | product_id | f1 | + -------------- + --------------- + ------------- + ---- ------------- + 3行(0.01秒)
有关
InnoDB
表
上外键的信息
也可以
在
数据库
中的
INNODB_FOREIGN
和
INNODB_FOREIGN_COLS
表中
找到
INFORMATION_SCHEMA
。
InnoDB
和
NDB
表支持外键。
有关
外键支持的信息
,
请参见
第15.6.1.5节“InnoDB和FOREIGN KEY约束”
InnoDB
。
默认情况下,MySQL可以容忍无效或不正确的数据值,并将它们强制为有效的数据输入值。 但是,您可以启用严格SQL模式以选择更糟糕的错误值的传统处理,以便服务器拒绝它们并中止它们出现的语句。 请参见 第5.1.11节“服务器SQL模式” 。
本节介绍MySQL的默认(宽容)行为,以及严格的SQL模式及其区别。
如果您没有使用严格模式,那么无论何时
向列中
插入
“
不正确
”
值,例如
NULL
将
NOT NULL
列
插入到
列中或将过大的数值插入数字列,MySQL都会将列设置为
“
最佳可能值
”
而不是产生错误:以下规则更详细地描述了它的工作原理:
如果您尝试将超出范围的值存储到数字列中,则MySQL Server会存储零,最小可能值或最大可能值,以最接近无效值为准。
对于字符串,MySQL存储空字符串或尽可能多的存储在列中的字符串。
如果您尝试将不以数字开头的字符串存储到数字列中,MySQL Server将存储0。
如
第1.8.3.4节“ENUM和SET约束”中
所述,处理
ENUM
和
SET
列的
值无效
。
MySQL的允许你存储某些不正确的日期值插入
DATE
和
DATETIME
列(如
'2000-02-31'
或
'2000-02-00'
)。
在这种情况下,当应用程序未启用严格的SQL模式时,应用程序将在存储它们之前验证日期。
如果MySQL可以存储日期值并检索完全相同的值,MySQL会将其存储为给定值。
如果日期完全错误(服务器存储它的能力之外),则特殊的
“
零
”
日期值
'0000-00-00'
将存储在列中。
如果尝试存储
NULL
到不带
NULL
值
的列,则
单行
INSERT
语句
会发生错误
。
对于多行
INSERT
语句或
INSERT
INTO
... SELECT
语句,MySQL Server存储列数据类型的隐式默认值。
通常,这适用
0
于数字类型,字符串类型为空字符串(
''
)
,日期和时间类型为
“
零
”
值。
第11.7节“数据类型默认值”
中讨论了隐式默认值
。
如果
INSERT
语句没有为列指定值,则在列定义包含explicit
DEFAULT
子句时
,MySQL会插入其默认值
。
如果定义没有这样的
DEFAULT
子句,MySQL会为列数据类型插入隐式默认值。
在非严格模式下使用前面的规则的原因是我们无法在语句开始执行之前检查这些条件。 如果我们在更新几行后遇到问题,我们不能回滚,因为存储引擎可能不支持回滚。 终止声明的选择并不是那么好; 在这种情况下,更新将 “ 完成一半 ” ,这可能是最糟糕的情况。 在这种情况下,最好 “ 尽你所能 ” ,然后继续,好像什么也没发生。
您可以使用
STRICT_TRANS_TABLES
或
STRICT_ALL_TABLES
SQL模式
选择更严格的输入值处理
:
SET sql_mode ='STRICT_TRANS_TABLES'; SET sql_mode ='STRICT_ALL_TABLES';
STRICT_TRANS_TABLES
为事务存储引擎启用严格模式,在某种程度上启用非事务性引擎。
它的工作原理如下:
对于事务存储引擎,语句中任何位置出现的错误数据值都会导致语句中止和回滚。
对于非事务性存储引擎,如果要插入或更新的第一行中发生错误,则语句将中止。
(当第一行发生错误时,语句可以被中止以保持表不变,就像事务表一样。)第一行之后的行中的错误不会中止语句,因为表已经被更改了第一排。
相反,调整错误的数据值并导致警告而不是错误。
换句话说,用
STRICT_TRANS_TABLES
,如果可以在不更改表的情况下完成,则错误的值会导致MySQL回滚到目前为止所做的所有更新。
但是一旦表格被更改,进一步的错误会导致调整和警告。
要进行更严格的检查,请启用
STRICT_ALL_TABLES
。
这与
STRICT_TRANS_TABLES
除了非事务性存储引擎之外
的情况相同,
即使对于第一行之后的行中的错误数据,错误也会中止该语句。
这意味着如果在非事务表的多行插入或更新中途发生错误,则会产生部分更新。
插入或更新较早的行,但是从错误点开始的行不是。
要避免非事务性表的这种情况,请使用单行语句或使用
STRICT_TRANS_TABLES
如果转换警告而不是错误是可以接受的。
为了避免问题,请不要使用MySQL来检查列内容。
让应用程序确保它只将有效值传递给数据库是最安全的(并且通常更快)。
无论使用哪种严格的模式选项,您可以通过使用引起的警告被视为错误
INSERT
IGNORE
或者
UPDATE IGNORE
,而不是
INSERT
或
UPDATE
不
IGNORE
。
ENUM
和
SET
列提供了一种有效的方法来定义只能包含给定值集的列。
请参见
第11.4.4节“ENUM类型”
和
第11.4.5节“SET类型”
。
启用严格模式后(请参见
第5.1.11节“服务器SQL模式”
),
ENUM
或
SET
列
的定义将
作为输入到列中的值的约束。
对于不满足以下条件的值,会发生错误:
ENUM
值必须是列定义中列出
的
值之一,或其内部数值等效值。
该值不能是错误值(即0或空字符串)。
对于定义为一列
ENUM('a','b','c')
,值,如
''
,
'd'
或者
'ax'
是无效的,并且将被拒绝。
甲
SET
值必须是空字符串或由仅在由逗号分隔的列定义中列出的值的值。
对于定义为的列
SET('a','b','c')
,诸如
'd'
或
'a,b,c,d'
无效的
值
将被拒绝。
如果使用
INSERT
IGNORE
或,
则可以在严格模式下禁止无效值的错误
UPDATE IGNORE
。
在这种情况下,会生成警告而不是错误。
对于
ENUM
,该值将作为错误成员(
0
)
插入
。
对于
SET
,除非删除任何无效的子字符串,否则将以给定的值插入值。
例如,
'a,x,b,y'
结果值为
'a,b'
。
以下部分列出了有助于使MySQL成为现实的开发人员,贡献者和支持者。
虽然Oracle公司和/或其附属公司拥有的所有版权
MySQL server
和
MySQL manual
,我们希望认可那些谁作出这样或那样的贡献
MySQL distribution
。
此处列出了贡献者,有点随机顺序:
Gianmassimo Vigazzola
或
<qwerg@mbox.vol.it>
<qwerg@tin.it>
Win32 / NT的初始端口。
每个Eric Olsson
对于动态记录格式的建设性批评和实际测试。
Irena Pancirov
<irena@mail.yacc.it>
使用Borland编译器的Win32端口。
mysqlshutdown.exe
和
mysqlwatch.exe
。
大卫J.休斯
为了努力制作共享软件SQL数据库。
在TcX,MySQL AB的前身,我们开始
mSQL
,但发现它无法满足我们的目的,所以我们为我们的应用程序构建器Unireg编写了一个SQL接口。
mysqladmin
和
mysql
客户端是很大程度上受其
mSQL
对手
影响的程序
。
我们花了很多精力使MySQL语法成为超集
mSQL
。
许多API的想法都借
mSQL
用于将免费
mSQL
程序
移植
到MySQL API中。
MySQL软件不包含任何代码
mSQL
。
分发中的两个文件(
client/insert_test.c
和
client/select_test.c
)基于发行版中相应的(非受版权保护的)文件
mSQL
,但作为示例进行修改,显示将代码转换
mSQL
为MySQL服务器
所需的更改
。
(
mSQL
受版权保护的David J. Hughes。)
帕特里克林奇
帮助我们获得 http://www.mysql.com/ 。
弗雷德林德伯格
用于设置qmail来处理MySQL邮件列表以及我们在管理MySQL邮件列表时获得的难以置信的帮助。
伊戈尔罗曼连科
<igor@frog.kiev.ua>
mysqldump
(以前
msqldump
,但由Monty移植和增强)。
尤里达里奥
用于保持和扩展MySQL OS / 2端口。
蒂姆·邦斯
mysqlhotcopy的 作者 。
Zarko Mocnik
<zarko.mocnik@dem.si>
排序斯洛文尼亚语。
“TAMITO”
<tommy@valley.ne.jp>
该
_MB
字符集宏以及UJIS和sjis字符集。
约书亚查马斯
<joshua@chamas.com>
基于并发插入,扩展日期语法,在NT上调试以及在MySQL邮件列表上回答。
伊夫卡里尔
<Yves.Carlier@rug.ac.be>
mysqlaccess ,一个显示用户访问权限的程序。
Rhys Jones
(和GWE科技有限公司)
<rhys@wales.com>
对于早期的JDBC驱动程序之一。
Xiaokun Kelvin朱博士
<X.Zhu@brad.ac.uk>
进一步开发早期JDBC驱动程序之一和其他与MySQL相关的Java工具。
詹姆斯库珀
<pixel@organic.com>
用于在其站点上设置可搜索的邮件列表存档。
里克梅哈利克
<Rick_Mehalick@i-o.com>
对于
xmysql
MySQL服务器的图形X客户端。
Doug Sisk
<sisk@wix.com>
为Red Hat Linux提供MySQL的RPM包。
迪曼亚历山大五世
<axeld@vial.ethz.ch>
为Red Hat Linux-Alpha提供MySQL的RPM包。
Antoni Pamies Olive
<toni@readysoft.es>
为英特尔和SPARC提供大量MySQL客户端的RPM版本。
Jay Bloodworth
<jay@pathways.sde.state.sc.us>
用于为MySQL 3.21提供RPM版本。
大卫Sacerdote
<davids@secnet.com>
安全检查DNS主机名的想法。
陈伟
<jou@nematic.ieo.nctu.edu.tw>
一些支持中文(BIG5)字符。
魏鹤
<hewei@mail.ied.ac.cn>
中文(GBK)字符集的许多功能。
Jan Pazdziora
<adelton@fi.muni.cz>
捷克排序。
Zeev Suraski
<bourbon@netvision.net.il>
FROM_UNIXTIME()
时间格式,
ENCRYPT()
功能和
野牛
顾问。
活跃的邮件列表成员。
Luuk de Boer
<luuk@wxs.nl>
将基准套件移植(和扩展)到
DBI
/
DBD
。
对
crash-me
基准测试
有很好的帮助
和运行。
一些新的日期功能。
该
mysql_setpermission
脚本。
亚历克西斯米哈伊洛夫
<root@medinf.chuvashia.su>
用户定义的函数(UDF);
CREATE
FUNCTION
和
DROP
FUNCTION
。
Andreas F. Bobak
<bobak@relog.ch>
AGGREGATE
用户定义函数
的
扩展。
罗斯威克林
<R.Wakelin@march.co.uk>
帮助设置InstallShield for MySQL-Win32。
Jethro Wright III
<jetman@li.net>
该
libmysql.dll
库。
James Pereria
<jpereira@iafrica.com>
Mysqlmanager,一个用于管理MySQL服务器的Win32 GUI工具。
柯特桑普森
<cjs@portal.ca>
将MIT-pthreads移植到NetBSD / Alpha和NetBSD 1.3 / i386。
马丁拉姆施
<m.ramsch@computer.org>
MySQL教程中的示例。
史蒂夫哈维
使 mysqlaccess 更安全。
Konark IA-64持久系统私人有限公司中心
帮助MySQL服务器的Win64端口。
Albert Chin-A-Young。
配置Tru64的更新,大文件支持和更好的TCP包装支持。
约翰比尔尔
pthread_mutex()
OS / 2的
仿真
。
本杰明普夫格曼
MERGE
要处理的
扩展
表
INSERTS
。
MySQL邮件列表中的活动成员。
Jocelyn Fournier
优秀的发现和报告无数的错误(特别是在MySQL 4.1子查询代码中)。
Marc Liyanage
维护OS X软件包并提供有关如何创建OS X软件包的宝贵反馈。
罗伯特卢瑟福
提供有关QNX端口的宝贵信息和反馈。
以前的NDB Cluster开发人员
很多人都参与了各种方式的暑期学生,硕士论文的学生,员工。 总共超过100人,所以这里太多了。 值得注意的名字是Ataullah Dabaghi,他直到1999年贡献了大约三分之一的代码库。 特别感谢AX系统的开发人员,他们为NDB Cluster提供了许多具有块,信号和崩溃跟踪功能的架构基础。 同样应该信任那些相信这些想法足以将其预算分配给1992年至今的发展的人。
谷歌公司
我们希望认可Google Inc.对MySQL发行版的贡献:Mark Callaghan的SMP Performance补丁和其他补丁。
其他贡献者,bugfinders和测试人员:詹姆斯·H.·汤普森,莫里吉奥门吉尼,沃伊切赫Tryc,卢卡·贝拉,扎克Mocnik,维姆博尼斯,艾玛·哈内克,
,
,
,泰德Deppner
,迈克·西蒙斯,亚科Hyvatti。
<jehamby@lightside>
<psmith@BayNetworks.com>
<duane@connect.com.au>
<ted@psyber.com>
还有很多来自邮件列表上的人的错误报告/补丁。
向那些帮助我们回答MySQL邮件列表问题的人致敬:
丹尼尔科赫
<dkoch@amcity.com>
Irix设置。
Luuk de Boer
<luuk@wxs.nl>
基准问题。
蒂姆萨勒
<tps@users.buoy.com>
DBD::mysql
的问题。
Boyd Lynn Gerber
<gerberb@zenez.com>
SCO相关问题。
理查德梅哈利克
<RM186061@shellus.com>
xmysql
相关问题和基本安装问题。
Zeev Suraski
<bourbon@netvision.net.il>
Apache模块配置问题(log&auth),PHP相关问题,SQL语法相关问题和其他一般问题。
Francesc Guasch
<frankie@citel.upc.es>
一般的问题。
Jonathan J Smith
<jsmith@wtp.net>
有关使用Linux的特定于操作系统的问题,SQL语法以及可能需要一些工作的其他事项。
大卫斯克拉
<sklar@student.net>
使用PHP和Perl中的MySQL。
阿利斯泰尔麦克唐纳
<A.MacDonald@uel.ac.uk>
是灵活的,可以处理Linux和HP-UX。
约翰里昂
<jlyon@imag.net>
关于在Linux系统上安装MySQL的问题,使用
.rpm
文件或从源代码编译。
Lorvid有限公司
<lorvid@WOLFENET.com>
简单的计费/许可/支持/版权问题。
帕特里克谢里尔
<patrick@coconet.com>
ODBC和VisualC ++接口问题。
兰迪哈蒙
<rjharmon@uptimecomputers.com>
DBD
,Linux,一些SQL语法问题。
以下人员帮助我们编写MySQL文档并在MySQL中翻译文档或错误消息。
保罗杜波依斯
正在进行帮助,使本手册正确且易于理解。 这包括将Monty和David的英语尝试重写为英语,就像其他人所知道的那样。
金阿尔代尔
帮助改写蒙蒂和大卫早期的英语尝试。
Michael J. Miller Jr.
<mke@terrapin.turbolift.com>
对于第一个MySQL手册。 常见问题解答的很多拼写/语言修复(很久以前就变成了MySQL手册)。
严彩琳
MySQL参考手册的第一个翻译器在2000年初以简体中文编写,Big5和HK编码版本基于该翻译。
杰伊弗莱厄蒂
<fty@mediapulse.com>
手册中
Perl
DBI
/
DBD
部分的
大部分内容
。
Paul Southworth
,Ray Loyzaga
<pauls@etext.org>
<yar@cs.su.oz.au>
参考手册的校对。
Therrien Gilbert
,Jean-Marc Pouyot
<gilbert@ican.net>
<jmp@scalaire.fr>
法语错误消息。
Petr Snajdr,
<snajdr@pvt.net>
捷克语错误消息。
雅罗斯瓦夫·莱万多夫斯基
<jotel@itnet.com.pl>
波兰语错误消息。
米格尔·安赫尔·费尔南德斯·罗伊斯
西班牙语错误消息
Roy-Magne Mo.
<rmo@www.hivolda.no>
挪威语错误消息和MySQL 3.21.xx的测试。
帖木儿。巴克耶夫
<root@timur.tatarstan.ru>
俄罗斯错误消息。
<brenno@dewinter.com>
&Filippo Grassilli
<phil@hyppo.com>
意大利语错误消息
Dirk Munzinger
<dirk@trinity.saar.de>
德语错误消息。
比利克斯特凡
<billik@sun.uniag.sk>
Slovak错误消息。
Stefan Saroiu
<tzoompy@cs.washington.edu>
罗马尼亚语错误消息。
彼得费尔
匈牙利语错误消息。
Roberto M. Serqueira
葡萄牙语错误消息
Carsten H. Pedersen
丹麦语错误消息。
Arjen Lentz
荷兰语错误消息,完成早期的部分翻译(还有关于一致性和拼写的工作)。
以下是许多人使用MySQL的一些最重要的API /包/应用程序的创建者/维护者列表。
我们不能在这里列出每个可能的包,因为列表将是难以维护的方式。 有关其他软件包,请参阅 http://solutions.mysql.com/software/ 上的软件门户 。
蒂姆·邦斯,鳄鱼笛卡尔
对于
DBD
(Perl)接口。
安德烈亚斯科尼格
<a.koenig@mind.de>
对于MySQL服务器的Perl接口。
Jochen Wiedmann
<wiedmann@neckar-alb.de>
用于维护Perl
DBD::mysql
模块。
尤金陈
<eugene@acenet.com.sg>
用于移植PHP for MySQL Server。
格里克里希特
MySQL 4.1测试和bug搜索。
mysqli
用于MySQL 4.1及更高版本的
新PHP 5.0
扩展(API)。
Giovanni Maruzzelli
<maruzz@matrice.it>
用于移植iODBC(Unix ODBC)。
Xavier Leroy
<Xavier.Leroy@inria.fr>
LinuxThreads的作者(Linux上的MySQL服务器使用)。
以下是我们用于创建MySQL的一些工具的列表。 我们使用它来表达我们对那些创建它们的人的感谢,因为没有这些我们无法使MySQL成为今天的样子。
自由软件基金会
从中我们得到了一个优秀的编译器(
gcc
),一个优秀的调试器(
gdb
和
libc
库(我们借用它
strto.c
来获取一些在Linux中运行的代码)。
自由软件基金会和XEmacs开发团队
对于一个非常棒的编辑/环境。
朱利安西沃德
作者
valgrind
,一个优秀的内存检查工具,帮助我们找到了很多在MySQL中很难找到的错误。
DorotheaLütkehaus和Andreas Zeller
对于
DDD
(数据显示调试器),它是
gdb
的优秀图形前端
)。
虽然Oracle公司和/或其附属公司持有的所有版权
MySQL server
和
MySQL manual
,我们要认识到以下的公司,这帮助我们融资的发展
MySQL server
,例如通过支付我们开发新的功能,或给我们硬件的发展这个
MySQL server
。
VA Linux / Andover.net
资助复制。
NuSphere
编辑MySQL手册。
鹳设计工作室
MySQL网站在1998-2000之间使用。
英特尔
为Windows和Linux平台上的开发做出了贡献。
康柏
为Linux / Alpha上的开发做出了贡献。
SWsoft公司
开发嵌入式 mysqld 版本。
FutureQuest
该
--skip-show-database
选项。