2025 年 1 月 21 日,MySQL 9.2.0 版本正式发布!

作者:MySQL 官方文档

本文和封面来源:https://dev.mysql.com/doc/refman/9.2/en/mysql-nutshell.html,爱可生开源社区翻译。

本文约 800 字,预计阅读需要 3 分钟。

根据 MySQL 版本发布计划,MySQL 9.2.0 是一个创新版,那么我们来看一下有哪些功能新增,弃用和删除。

一、新增或更改的功能

CREATE_SPATIAL_REFERENCE_SYSTEM 权限

MySQL 9.2.0 引入了 CREATE_SPATIAL_REFERENCE_SYSTEM 权限,该权限允许用户执行任何以下声明:

  • CREATE SPATIAL REFERENCE SYSTEM
  • CREATE OR REPLACE SPATIAL REFERENCE SYSTEM
  • DROP SPATIAL REFERENCE SYSTEM

目前,若没有此权限(或 SUPER 权限)的情况下执行以上列出的任何语句,都会引发错误:

Error number: 6427; Symbol: ER_CMD_NEED_SUPER_OR_CREATE_SPATIAL_REFERENCE_SYSTEM; SQLSTATE: HY000
Message: You need the SUPER or CREATE_SPATIAL_REFERENCE_SYSTEM privilege for command '%s'

更多信息

JavaScript 库

多语言引擎组件(MLE)现在支持可重用的 JavaScript 库,其中包含可以从其他 JavaScript 存储程序调用的函数。此类函数必须使用导出 keyword 标记为可导入。

函数库可以使用 MySQL 9.2.0 中添加的 CREATE LIBRARYDROP LIBRARY SQL 语句进行管理;它们可以包含在其他存储的 JavaScript 程序中,并在同一版本中添加 USING 子句到 CREATE FUNCTIONCREATE PROCEDUREUSING 支持一个或多个库名称的列表。

CREATE LIBRARY 语句在给定数据库中创建一个新的 JavaScript 库,给定一个或多个 JavaScript 函数的代码。JavaScript 代码是在创建时解析并检查有效性;如果代码包含任何错误,则拒绝 CREATE LIBRARYDROP LIBRARY 删除给定的 JavaScript 库。

更多信息

用于 JS 的 SQL 存储例程和会话变量 API

MySQL 9.2.0 及以上版本的 MLE 组件支持访问从 JavaScript 例程到用户定义的函数,过程和变量。

现在可以使用 Schema 方法访问 MySQL 存储的函数和过程 getFunction()getProcedure() 的这些函数中的每一个都返回一个可以使用参数 Function 对象。

此外,现在可以访问 MySQL 用户变量直接作为 JavaScript 全局变量的属性 Session 对象。JavaScript 访问 Session Variables,了解更多信息 信息和示例。

MySQL 9.2.0 版本还增加了对直接访问多个 MySQL 内置函数的支持,如下所示:

  • rand():等同于 MySQL RAND()
  • sleep():等同于 MySQL SLEEP()
  • uuid():等同于 MySQL UUID()
  • isUUID():等同于 MySQL IS_UUID()

所有这些函数都可以作为全局 MySQL 对象的方法调用。

更多信息

JavaScript 事务 API

从 MySQL 9.2.0 开始,MLE 组件提供了一个 JavaScript MySQL 事务 API,它执行大多数 MySQL 事务性 SQL 语句的操作,例如 作为 START TRANSACTIONCOMMITROLLBACKSET AUTOCOMMIT。对 Savepoints 也支持。

这项工作还实现了一个 SqlError 对象。

更多信息

JavaScript ENUM 和 SET 支持

MySQL 9.2.0 及更高版本中的 JavaScript 存储例程的参数支持 MySQL 的 ENUM 和 SET 类型。

更多信息

EXPLAIN FORMAT=JSON

MySQL 9.2.0 在输出中添加格式版本信息 EXPLAIN FORMAT=JSON 设置 JSON 格式版本时设置为 2。

要设置格式版本,设置 explain_json_format_version=2。输出如下:

mysql> EXPLAIN FORMAT=JSON SELECT 1\G
*************************** 1. row ***************************
EXPLAIN: {
  "query": "/* select#1 */ select 1 AS `1`",
  "query_plan": {
    "operation": "Rows fetched before execution",
    "access_type": "rows_fetched_before_execution",
    "estimated_rows": 1.0,
    "estimated_total_cost": 0.0,
    "estimated_first_row_cost": 0.0
  },
  "query_type": "select",
  "json_schema_version": "2.0"
}
1 row in set (0.00 sec)

此语句的输出不包含任何格式 version 信息时 explain_json_format_version 为 1,如下所示:

mysql> SET explain_json_format_version=1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@explain_json_format_version;
+-------------------------------+
| @@explain_json_format_version |
+-------------------------------+
|                             1 |
+-------------------------------+
1 row in set (0.00 sec)

mysql> EXPLAIN FORMAT=JSON SELECT 1\G
*************************** 1. row ***************************
EXPLAIN: {
  "query_block": {
    "select_id": 1,
    "message": "No tables used"
  }
}
1 row in set, 1 warning (0.00 sec)

更多信息

弃用的功能

以下功能在 MySQL 9.2 中已弃用 ,并且可能会在未来的系列中删除。替代方案如下所示,请尽快更新。

对于使用 MySQL 9.2 中已弃用的功能且已在更高版本的 MySQL 版本中删除的应用程序,语句在从 MySQL 9.2 源复制到运行更高版本的副本时可能会失败,或者可能对源和副本产生不同的影响。为避免此类问题,应修改使用 9.2 中已弃用功能的应用程序以避免这些问题,并尽可能使用替代方法。

函数(已启用)
  • version_tokens_delete()
  • version_tokens_edit()
  • version_tokens_lock_exclusive()
  • version_tokens_lock_shared()
  • version_tokens_set()
  • version_tokens_show()
  • version_tokens_unlock()
权限
  • VERSION_TOKEN_ADMIN
系统变量
  • version_tokens_session
  • version_tokens_session_number

删除的功能

以下功能已过时,并已在 MySQL 9.2.0 中删除。

关键字限制

BINLOG 关键字现在受到限制,不能再作为 MySQL 存储例程或存储函数中的标签使用。在升级到 MySQL 9.2 之前,您应该相应地更新任何受影响的应用程序。
更多信息


爱可生开源社区
426 声望209 粉丝

成立于 2017 年,以开源高质量的运维工具、日常分享技术干货内容、持续的全国性的社区活动为社区己任;目前开源的产品有:SQL审核工具 SQLE,分布式中间件 DBLE、数据传输组件DTLE。