> Linux新闻 >

MySQL 9.2.0 有哪些功能新增、弃用和删除

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

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

1 一、新增或更改的功能

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'

更多信息:https://dev.mysql.com/doc/refman/9.2/en/privileges-provided.html


JavaScript 库

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

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

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

更多信息:https://dev.mysql.com/doc/refman/9.2/en/srjs-libraries.html

用于 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 对象的方法调用。

更多信息: https://dev.mysql.com/doc/refman/9.2/en/srjsapi-mysql.html

JavaScript 事务 API

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

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

更多信息:https://dev.mysql.com/doc/refman/9.2/en/srjsapi-transactions.html

JavaScript ENUM 和 SET 支持

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

更多信息: https://dev.mysql.com/doc/refman/9.2/en/srjs-data-arguments.html#srjs-enum-set-conversion

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)

更多信息:https://dev.mysql.com/doc/refman/9.2/en/explain.html#explain-execution-plan

2 弃用的功能

以下功能在 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

3 删除的功能

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

关键字限制

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

更多信息:https://dev.mysql.com/doc/refman/9.2/en/keywkeywordsords.html

(责任编辑:IT)