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 PROCEDURE
;USING
支持一个或多个库名称的列表。
CREATE LIBRARY
语句在给定数据库中创建一个新的 JavaScript 库,给定一个或多个 JavaScript 函数的代码。JavaScript 代码是在创建时解析并检查有效性;如果代码包含任何错误,则拒绝CREATE LIBRARY
。DROP 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()
:等同于 MySQLRAND()
sleep()
:等同于 MySQLSLEEP()
uuid()
:等同于 MySQLUUID()
isUUID()
:等同于 MySQLIS_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 TRANSACTION
,COMMIT
、ROLLBACK
和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