MySQL8新特性 - 全栈教程之MySQL8教程

MySQL8新特性包含:MySQL8数据库新特性、MySQL8运算符和MySQL8 EXPLAIN格式等,全栈教程之MySQL8教程,主打原创、全部免费。

教程目录:
教程内容:
最近更新:2025-03-11

一、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、MySQL8InnoDB

  • 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、MySQL8EXPLAIN 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、MySQL8FIDO 库升级

  • 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教程,主打原创,定期更新,全部免费,欢迎收藏学习和转载分享。