MySQL8 新特性

MySQL8 新特性,MySQL8教程,介绍 MySQL8 数据库的新特性。

【全栈教程】:https://try8.cn/article
教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 数据库新特性

MySQL8 是 MySQL 数据库的最新版本,在本章节将 概括性 的讲解 MySQL8 数据库新增的一些特性,并分类列出 MySQL8 新版本下添加的内容,包含升级的新功能、数据库变量和服务器选项等。


1.1、MySQL8 数据字典

MySQL8 合并了一个事务数据字典,用于存储数据库对象,在以前的版本中,字典数据存储在元数据文件和非事务表中。


1.2、MySQL8 原子数据

原子 DDL 语句将与 DDL 操作关联的数据字典更新、存储引擎操作和二进制日志组合写入到单个原子事务中。


1.3、MySQL8 软件升级

安装新版本的 MySQL8 后,MySQL服务器会在下次启动时自动升级数据字典表,而不依赖 DBA 手动操作。


1.4、MySQL8 会话重用

MySQL8 服务器现在默认支持 SSL 会话重用,无需新建,并通过超时设置来控制服务器维护会话缓存的时间。


1.5、MySQL8 账号安全

MySQL8 在账号管理方面提升了安全性,可以使 DBA 在账号管理上有更大的操作空间。


1.6、MySQL8 资源管理

MySQL8 现在支持资源组的创建和管理,并允许将服务器中运行的线程分配给特定的组,以便线程根据组可用的资源执行。例如,服务器在启动时确定有多少虚拟 CPU 可用,然后可以将这些 CPU 与资源组相关联并将线程分配给组。


1.7、MySQL8 库表加密

现在可以通过定义和强制执行加密默认值来对全局管理表加密。该 default_table_encryption 变量为新创建的模式和通用表空间定义加密默认值。模式的加密默认值也可以通过 DEFAULT ENCRYPTION 在创建模式时使用子句定义。


1.8、MySQL8 InnoDB

MySQL8 在存储引擎 InnoDB 添加了很多的增强功能。


1.9、MySQL8 字符集支持

默认字符集已从 latin1 更改为 utf8mb4,该 utf8mb4 字符集有几个新的排序规则,包括 utf8mb4_ja_0900_as_cs 等。


1.10、MySQL8 JSON

MySQL8 对 JSON 功能进行了较大的增强。


1.11、MySQL8 数据类型

MySQL8 现在支持使用表达式作为数据类型规范中的默认值。这包括将表达式用作 BLOB、 TEXT、 GEOMETRY和 JSON数据类型的默认值,以前根本无法为这些类型分配默认值。


1.12、MySQL8 优化器

MySQL 现在支持不可见索引、支持降序索引和创建索引表达式值等。


1.13、MySQL8 常用表表达式

支持非递归和递归的公用表表达式。


1.14、MySQL8 窗口函数

MySQL8 现在支持窗口函数,对于查询中的每一行,使用与该行相关的行执行计算。


1.15、MySQL8 横向派生表

派生表现在可以在 LATERAL 关键字前面指定允许在同一 FROM 子句中引用前面表的列。


1.16、MySQL8 DELETE 别名

单表 DELETE 语句支持使用表别名。


1.17、MySQL8 正则表达式

正则表达式支持已使用 Unicode 国际组件 (ICU) 重新实现,它提供完整的 Unicode 支持并且是多字节安全的。


1.18、MySQL8 内部临时表

存储 TempTable 引擎取代 MEMORY 存储引擎成为内存内部临时表的默认引擎。


1.19、MySQL8 日志记录

日志被重写以使用 MySQL 组件架构。传统的错误日志记录是使用内置组件实现的,而使用系统日志的日志记录是作为可加载组件实现的。此外,还提供可加载的 JSON 日志编写器。


1.20、MySQL8 备用锁

一种新型备份锁允许在线备份期间进行 DML,同时防止可能导致快照不一致的操作。


1.21、MySQL8 复制

支持使用紧凑的二进制格式对 JSON 文档的部分更新进行二进制日志记录,从而比记录完整的 JSON 文档节省日志空间。当使用基于语句的日志记录时,这种紧凑的日志记录会自动完成,并且可以通过将新 binlog_row_value_options 系统变量设置为 来启用 PARTIAL_JSON。


1.22、MySQL8 连接管理

MySQL 服务器现在允许专门为管理连接配置 TCP/IP 端口。


1.23、MySQL8 配置

整个 MySQL 主机名的最大允许长度已从之前的 60 个字符的限制提高到 255 个 ASCII 字符。


1.24、MySQL8 插件

以前 MySQL 插件可以用 C 或 C++ 编写。现在 MySQL 头文件包含 C++ 代码,这意味着插件必须用 C++ 编写。


1.25、MySQL8 API

MySQL C API 现在支持与 MySQL 服务器进行非阻塞通信的异步函数。每个函数都是现有同步函数的异步副本。如果从服务器连接读取或写入必须等待,则同步函数会阻塞。异步函数使应用程序能够检查服务器连接上的工作是否准备好继续。如果没有,应用程序可以在稍后再次检查之前执行其他工作。


1.26、MySQL8 目标类型

函数 CAST() 和 CONVERT() 现在支持转换为类型 DOUBLE、 FLOAT 和 REAL。


1.27、MySQL8 JSON 模式验证

添加两个功能 JSON_SCHEMA_VALID(), JSON_SCHEMA_VALIDATION_REPORT() 用于再次验证 JSON 文档。


1.28、MySQL8 多值索引

InnoDB 支持创建多值索引,多值索引是在 JSON 存储值的列上定义二级索引,对于单条数据可以有多个索引记录。


1.29、MySQL8 提示时区

time_zone 会话变量可以使用 SET_VAR 。


1.30、MySQL8 日志归档

当备份操作正在进行时,复制重做日志记录的备份实用程序有时可能无法跟上重做日志生成的步伐,从而导致由于重做日志记录被覆盖而丢失重做日志记录。重做日志归档功能通过将重做日志记录顺序写入归档文件来解决这个问题。


1.31、MySQL8 插件克隆

MySQL 提供了一个克隆插件,允许 InnoDB 在本地或从远程 MySQL 服务器实例克隆数据。


1.32、MySQL8 哈希连接优化

只要连接中的每对表至少包含一个等值连接条件,并且没有索引适用于任何连接条件,就会使用哈希连接。


1.33、MySQL8 EXPLAIN ANALYZE 语句

MySQL8 实现了新形式的 EXPLAIN 语句,每个迭代器提供有关语句 EXPLAIN ANALYZE 执行的扩展信息 。


1.34、MySQL8 查询投射

MySQL 在参数的数据类型与预期数据类型不匹配的表达式和条件中将强制转换操作注入到查询项树中。


1.35、MySQL8 时区支持

服务器接受带有插入日期时间 (TIMESTAMP和 DATETIME) 值的时区偏移量。


1.36、MySQL8 JSON 模式 CHECK 约束

在使用 JSON_SCHEMA_VALID() 指定 CHECK 约束时,提供了此类约束失效原因的准确信息。


1.37、MySQL8 JSON ON DUPLICATE KEY UPDATE 的行和列别名

可以使用别名引用要插入的行,以及可选的列。


1.38、MySQL8 显式表子句和表值构造函数

根据 SQL 标准添加表值构造函数和显式表子句。


1.39、MySQL8 FORCE INDEX、IGNORE INDEX 优化器提示

MySQL8 引入了索引级优化器提示,遵循与现有索引级优化器提示相同的语法和用法基本规则。


1.40、MySQL8 JSON_VALUE() 函数

JSON_VALUE 实现了一个旨在简化列索引的新功能。在其最基本的形式中,它将一个 JSON 文档和一个指向该文档中单个值的 JSON 路径作为参数,并且允许您使用关键字指定返回类型。


1.41、MySQL8 用户评论和用户属性

MySQL8 引入了在创建或更新用户帐户时设置用户评论和用户属性的功能。


1.42、MySQL8 optimizer_switch 标志

optimizer_switch 系统变量添加了两个新标志 prefer_ordering_index 和 subquery_to_derived 。


1.43、MySQL8 XML 增强

LOAD XML 语句现在支持 CDATA 导入 XML 中的部分。


1.44、MySQL8 YEAR 类型

服务器允许转换为 YEAR 。


1.45、MySQL8 检索 TIMESTAMP

支持在检索时将列值从系统时区转换 TIMESTAMP 为 UTC ,使用其中说明符或之一。


1.46、MySQL8 转储文件输出同步

SELECT INTO DUMPFILE 支持 and 语句写入文件时的周期同步 SELECT INTO OUTFILE。


1.47、MySQL8 单独编制报表

准备好的语句只编译一次而不是每次执行。对于存储过程中的语句也是如此。


1.48、MySQL8 RIGHT JOIN 作为 LEFT JOIN 处理

服务器将 RIGHT JOIN 内部的所有实例处理为 LEFT JOIN,消除了一些在解析时未执行完整转换的特殊情况。


1.49、MySQL8 派生表优化

使用派生优化将条件 WHERE 移动到子查询中通常可以减少必须处理的行数,从而减少执行查询所需的时间。


1.50、MySQL8 非锁定读取

以前在 MySQL 授权表上获取行锁的读取操作将作为非锁定读取执行。现在在 MySQL 授权表上非锁定读取。


1.51、MySQL8 64位

64 位版本的 Linux、MacOS 和 Windows 支持 FROM_UNIXTIME()、UNIX_TIMESTAMP()、CONVERT_TZ()。


1.52、MySQL8 资源分配控制

您可以通过检查状态变量来查看用于所有普通用户发出的查询的内存量 Global_connection_memory 。这个总数不包括系统用户使用的资源,例如 MySQL root,也不包括缓冲 InnoDB 池占用的任何内存。


1.53、MySQL8 XA 事务的支持

事务一旦准备好,就不再连接到原始连接。这意味着可以由另一个连接提交或回滚。


1.54、MySQL8 日志清除

添加了 binlog_expire_logs_auto_purge 系统变量,它提供了一个单一的接口来启用和禁用二进制日志的自动清除。


1.55、MySQL8 触发器创建语句

CREATE FUNCTION 、CREATE PROCEDURE、CREATE TRIGGER 支持一个IF NOT EXISTS选项。


1.56、MySQL8 FIDO 库升级

fido2 库(与 authentication_fido 插件一起使用)从 1.5.0 版本升级到 1.8.0 版本。


1.57、MySQL8 字符集

通过为那些以前仅由其他语言的特定语言排序规则涵盖的语言提供特定于语言的排序规则来解决此类问题。


1.58、MySQL8 REVOKE

IF EXISTS 和 IGNORE UNKNOWN USER 选项用于 REVOKE。 用于在语句中指定的用户、角色或权限找不到或无法分配时确定语句是产生错误还是警告。


1.59、MySQL8 生成不可见的主键

可以运行复制源服务器,以便将生成的不可见主键 (GIPK) 添加到 InnoDB 没有显式主键创建的任何表中。


1.60、MySQL8 复制

可以将生成的不可见主键添加到任何 InnoDB 表,否则在复制时没有主键。


1.61、MySQL8 崩溃安全的 XA 事务

无论出于何种原因退出复制拓扑的服务器在重新加入时总是可以恢复到一致的 XA 事务状态。


1.62、MySQL8 UNION 嵌套

带括号的查询表达式的主体最多可以嵌套 63 层,并结合 UNION。


1.63、MySQL8 禁用查询重写

以前在使用 Rewriter 所有查询都可能被重写。具有权限 SKIP_QUERY_REWRITE 将不会被重写。


1.64、MySQL8 复制过滤

以前每当使用 or 时, 语句 XA START、XA END、XA COMMIT 和 XA ROLLBACK 都会被默认数据库过滤 ,这可能会导致错过事务。MySQL8 在这种情况下不会过滤这些语句。


1.65、MySQL8 权限检查

当使用复制过滤时,副本不再引发与 require_row_format 过滤掉的事件的权限检查,从而过滤掉任何验证失败的事务。


1.66、MySQL8 运算符

MySQL8 添加了对 SQL INTERSECT 和 EXCEPT 表运算符的支持。


1.67、MySQL8 用户定义的直方图

可以将列的直方图设置为用户指定的 JSON 值。


1.68、MySQL8 EXPLAIN 格式

MySQL8 添加了一个系统变量 ,用于在没有任何选项下获取查询执行计划的语句 explain_format 的输出格式。


二、MySQL8 新特性 总结

MySQL8教程 - MySQL8 新特性,主要用于介绍 MySQL 和 MySQL8 数据库,从新增功能开始,逐步到 MySQL8 数据库的环境变量、服务器选项等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。