MySQL8 是 MySQL 数据库的最新版本,在本章节将 概括性 的讲解 MySQL8 数据库新增的一些特性,并分类列出 MySQL8 新版本下添加的内容,包含升级的新功能、数据库变量和服务器选项等。
MySQL8 合并了一个事务数据字典,用于存储数据库对象,在以前的版本中,字典数据存储在元数据文件和非事务表中。
原子 DDL 语句将与 DDL 操作关联的数据字典更新、存储引擎操作和二进制日志组合写入到单个原子事务中。
安装新版本的 MySQL8 后,MySQL服务器会在下次启动时自动升级数据字典表,而不依赖 DBA 手动操作。
MySQL8 服务器现在默认支持 SSL 会话重用,无需新建,并通过超时设置来控制服务器维护会话缓存的时间。
MySQL8 在账号管理方面提升了安全性,可以使 DBA 在账号管理上有更大的操作空间。
MySQL8 现在支持资源组的创建和管理,并允许将服务器中运行的线程分配给特定的组,以便线程根据组可用的资源执行。例如,服务器在启动时确定有多少虚拟 CPU 可用,然后可以将这些 CPU 与资源组相关联并将线程分配给组。
现在可以通过定义和强制执行加密默认值来对全局管理表加密。该 default_table_encryption 变量为新创建的模式和通用表空间定义加密默认值。模式的加密默认值也可以通过 DEFAULT ENCRYPTION 在创建模式时使用子句定义。
MySQL8 在存储引擎 InnoDB 添加了很多的增强功能。
默认字符集已从 latin1 更改为 utf8mb4,该 utf8mb4 字符集有几个新的排序规则,包括 utf8mb4_ja_0900_as_cs 等。
MySQL8 对 JSON 功能进行了较大的增强。
MySQL8 现在支持使用表达式作为数据类型规范中的默认值。这包括将表达式用作 BLOB、 TEXT、 GEOMETRY和 JSON数据类型的默认值,以前根本无法为这些类型分配默认值。
MySQL 现在支持不可见索引、支持降序索引和创建索引表达式值等。
支持非递归和递归的公用表表达式。
MySQL8 现在支持窗口函数,对于查询中的每一行,使用与该行相关的行执行计算。
派生表现在可以在 LATERAL 关键字前面指定允许在同一 FROM 子句中引用前面表的列。
单表 DELETE 语句支持使用表别名。
正则表达式支持已使用 Unicode 国际组件 (ICU) 重新实现,它提供完整的 Unicode 支持并且是多字节安全的。
存储 TempTable 引擎取代 MEMORY 存储引擎成为内存内部临时表的默认引擎。
日志被重写以使用 MySQL 组件架构。传统的错误日志记录是使用内置组件实现的,而使用系统日志的日志记录是作为可加载组件实现的。此外,还提供可加载的 JSON 日志编写器。
一种新型备份锁允许在线备份期间进行 DML,同时防止可能导致快照不一致的操作。
支持使用紧凑的二进制格式对 JSON 文档的部分更新进行二进制日志记录,从而比记录完整的 JSON 文档节省日志空间。当使用基于语句的日志记录时,这种紧凑的日志记录会自动完成,并且可以通过将新 binlog_row_value_options 系统变量设置为 来启用 PARTIAL_JSON。
MySQL 服务器现在允许专门为管理连接配置 TCP/IP 端口。
整个 MySQL 主机名的最大允许长度已从之前的 60 个字符的限制提高到 255 个 ASCII 字符。
以前 MySQL 插件可以用 C 或 C++ 编写。现在 MySQL 头文件包含 C++ 代码,这意味着插件必须用 C++ 编写。
MySQL C API 现在支持与 MySQL 服务器进行非阻塞通信的异步函数。每个函数都是现有同步函数的异步副本。如果从服务器连接读取或写入必须等待,则同步函数会阻塞。异步函数使应用程序能够检查服务器连接上的工作是否准备好继续。如果没有,应用程序可以在稍后再次检查之前执行其他工作。
函数 CAST() 和 CONVERT() 现在支持转换为类型 DOUBLE、 FLOAT 和 REAL。
添加两个功能 JSON_SCHEMA_VALID(), JSON_SCHEMA_VALIDATION_REPORT() 用于再次验证 JSON 文档。
InnoDB 支持创建多值索引,多值索引是在 JSON 存储值的列上定义二级索引,对于单条数据可以有多个索引记录。
time_zone 会话变量可以使用 SET_VAR 。
当备份操作正在进行时,复制重做日志记录的备份实用程序有时可能无法跟上重做日志生成的步伐,从而导致由于重做日志记录被覆盖而丢失重做日志记录。重做日志归档功能通过将重做日志记录顺序写入归档文件来解决这个问题。
MySQL 提供了一个克隆插件,允许 InnoDB 在本地或从远程 MySQL 服务器实例克隆数据。
只要连接中的每对表至少包含一个等值连接条件,并且没有索引适用于任何连接条件,就会使用哈希连接。
MySQL8 实现了新形式的 EXPLAIN 语句,每个迭代器提供有关语句 EXPLAIN ANALYZE 执行的扩展信息 。
MySQL 在参数的数据类型与预期数据类型不匹配的表达式和条件中将强制转换操作注入到查询项树中。
服务器接受带有插入日期时间 (TIMESTAMP和 DATETIME) 值的时区偏移量。
在使用 JSON_SCHEMA_VALID() 指定 CHECK 约束时,提供了此类约束失效原因的准确信息。
可以使用别名引用要插入的行,以及可选的列。
根据 SQL 标准添加表值构造函数和显式表子句。
MySQL8 引入了索引级优化器提示,遵循与现有索引级优化器提示相同的语法和用法基本规则。
JSON_VALUE 实现了一个旨在简化列索引的新功能。在其最基本的形式中,它将一个 JSON 文档和一个指向该文档中单个值的 JSON 路径作为参数,并且允许您使用关键字指定返回类型。
MySQL8 引入了在创建或更新用户帐户时设置用户评论和用户属性的功能。
optimizer_switch 系统变量添加了两个新标志 prefer_ordering_index 和 subquery_to_derived 。
LOAD XML 语句现在支持 CDATA 导入 XML 中的部分。
服务器允许转换为 YEAR 。
支持在检索时将列值从系统时区转换 TIMESTAMP 为 UTC ,使用其中说明符或之一。
SELECT INTO DUMPFILE 支持 and 语句写入文件时的周期同步 SELECT INTO OUTFILE。
准备好的语句只编译一次而不是每次执行。对于存储过程中的语句也是如此。
服务器将 RIGHT JOIN 内部的所有实例处理为 LEFT JOIN,消除了一些在解析时未执行完整转换的特殊情况。
使用派生优化将条件 WHERE 移动到子查询中通常可以减少必须处理的行数,从而减少执行查询所需的时间。
以前在 MySQL 授权表上获取行锁的读取操作将作为非锁定读取执行。现在在 MySQL 授权表上非锁定读取。
64 位版本的 Linux、MacOS 和 Windows 支持 FROM_UNIXTIME()、UNIX_TIMESTAMP()、CONVERT_TZ()。
您可以通过检查状态变量来查看用于所有普通用户发出的查询的内存量 Global_connection_memory 。这个总数不包括系统用户使用的资源,例如 MySQL root,也不包括缓冲 InnoDB 池占用的任何内存。
事务一旦准备好,就不再连接到原始连接。这意味着可以由另一个连接提交或回滚。
添加了 binlog_expire_logs_auto_purge 系统变量,它提供了一个单一的接口来启用和禁用二进制日志的自动清除。
CREATE FUNCTION 、CREATE PROCEDURE、CREATE TRIGGER 支持一个IF NOT EXISTS选项。
fido2 库(与 authentication_fido 插件一起使用)从 1.5.0 版本升级到 1.8.0 版本。
通过为那些以前仅由其他语言的特定语言排序规则涵盖的语言提供特定于语言的排序规则来解决此类问题。
IF EXISTS 和 IGNORE UNKNOWN USER 选项用于 REVOKE。 用于在语句中指定的用户、角色或权限找不到或无法分配时确定语句是产生错误还是警告。
可以运行复制源服务器,以便将生成的不可见主键 (GIPK) 添加到 InnoDB 没有显式主键创建的任何表中。
可以将生成的不可见主键添加到任何 InnoDB 表,否则在复制时没有主键。
无论出于何种原因退出复制拓扑的服务器在重新加入时总是可以恢复到一致的 XA 事务状态。
带括号的查询表达式的主体最多可以嵌套 63 层,并结合 UNION。
以前在使用 Rewriter 所有查询都可能被重写。具有权限 SKIP_QUERY_REWRITE 将不会被重写。
以前每当使用 or 时, 语句 XA START、XA END、XA COMMIT 和 XA ROLLBACK 都会被默认数据库过滤 ,这可能会导致错过事务。MySQL8 在这种情况下不会过滤这些语句。
当使用复制过滤时,副本不再引发与 require_row_format 过滤掉的事件的权限检查,从而过滤掉任何验证失败的事务。
MySQL8 添加了对 SQL INTERSECT 和 EXCEPT 表运算符的支持。
可以将列的直方图设置为用户指定的 JSON 值。
MySQL8 添加了一个系统变量 ,用于在没有任何选项下获取查询执行计划的语句 explain_format 的输出格式。
MySQL8教程 - MySQL8 新特性,主要用于介绍 MySQL 和 MySQL8 数据库,从新增功能开始,逐步到 MySQL8 数据库的环境变量、服务器选项等,通篇实用易懂,让 MySQL8 入门更加快速和简单。
《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。