
MySQL 9.2 正式发布!作为开源关系型数据库管理系统的最新版本,这次更新带来了不少改进和新功能,当然也有一些功能被弃用。接下来,我们一起来看看这些变化吧!
MySQL 9.2 新增或变更的功能
CREATE_SPATIAL_REFERENCE_SYSTEM 权限
在 MySQL 9.2.0 中,新增了一个名为CREATE_SPATIAL_REFERENCE_SYSTEM的权限。拥有这个权限的用户可以执行以下操作:
CREATE SPATIAL REFERENCE SYSTEMCREATE OR REPLACE SPATIAL REFERENCE SYSTEMDROP SPATIAL REFERENCE SYSTEM
如果用户没有该权限(或者没有 SUPER 权限),在尝试执行上述语句时,会触发错误ER_CMD_NEED_SUPER_OR_CREATE_SPATIAL_REFERENCE_SYSTEM。需要注意的是,针对这些操作,使用 SUPER 权限的方式已经被弃用了。
JavaScript 库支持:更灵活的代码复用
MySQL 9.2.0 为 MLE(MySQL Language Extensions)组件带来了一个重磅更新:支持可重用的 JavaScript 库!这意味着,你可以在其他存储程序中直接调用这些库中的函数,大大提升了代码的复用性和开发效率。
库的创建与管理
- 新增了
CREATE LIBRARY和DROP LIBRARY语句,用于创建和删除 JavaScript 库。 - 在创建库时,MySQL 会自动解析并检查 JavaScript 代码的有效性。如果代码有错误
CREATE LIBRARY会直接失败,确保库的可靠性。
函数调用与别名
- 在其他 JavaScript 存储程序中,可以通过
library_name.function_name的格式调用库中的函数。 - 使用
CREATE FUNCTION或CREATE PROCEDURE时,新增的USING子句允许为库设置别名,进一步简化调用流程。
查看库信息
- 新增的
SHOW CREATE LIBRARY语句,可以方便地查看现有 JavaScript 库的代码。 - 还引入了两张 Information Schema 表:
LIBRARIES:列出所有 JavaScript 库的详细信息。ROUTINE_LIBRARIES:展示使用了 JavaScript 库的存储例程信息。
状态变量统计
- 通过以下状态变量,可以实时监控 JavaScript 库的操作情况:
Com_create_library:统计CREATE LIBRARY的执行次数。Com_drop_library:统计DROP LIBRARY的执行次数。Com_show_create_library:统计SHOW CREATE LIBRARY的执行次数。
使用场景
这项功能非常适合需要频繁复用 JavaScript 代码的场景,比如复杂的数据处理逻辑或通用的工具函数。通过将代码封装到库中,不仅减少了重复代码,还能让存储程序更加简洁和易于维护。
JavaScript 中的 SQL 存储例程和会话变量 API
MySQL 9.2.0 为 MLE 组件带来了更多灵活性,现在你可以在 JavaScript 例程中直接调用用户定义的函数、存储过程以及会话变量了!这让 JavaScript 与 MySQL 的集成更加无缝,开发效率也大大提升。
调用存储函数和存储过程
在 JavaScript 中,可以通过Schema对象的以下方法访问 MySQL 的存储函数和存储过程:
getFunction():用于获取存储函数。getProcedure():用于获取存储过程。
这两个方法都会返回一个Function对象,可以直接调用并传递参数:
- 对于存储函数的参数或存储过程的
IN参数,直接传递即可。 - 对于
OUT或INOUT参数,需要使用mysql.arg()创建一个占位符(Argument对象)。
访问会话变量
通过 JavaScript 的全局Session对象,可以直接访问 MySQL 的用户变量。这些变量以属性的形式呈现,操作起来非常直观。具体的用法可以参考「从 JavaScript 访问会话变量」部分的示例。
内置函数的直接调用
MySQL 9.2.0 还新增了对以下内置函数的直接访问支持,这些函数都可以通过全局Mysql对象的方法调用:
rand():对应 MySQL 的RAND()函数。sleep():对应 MySQL 的SLEEP()函数。uuid():对应 MySQL 的UUID()函数。isUUID():对应 MySQL 的IS_UUID()函数。
使用场景
这些功能非常适合需要在 JavaScript 中直接操作数据库的场景,比如:
- 在存储过程中调用 JavaScript 逻辑。
- 通过 JavaScript 动态访问和修改会话变量。
- 直接使用 MySQL 内置函数简化代码逻辑。
JavaScript 事务 API
MySQL 9.2.0 版本为 MLE 组件带来了一个全新的 JavaScript MySQL 事务 API。这个 API 支持大多数 MySQL 事务性 SQL 语句的功能,比如START TRANSACTION、COMMIT、ROLLBACK以及SET AUTOCOMMIT。不仅如此,它还支持事务保存点(savepoints)功能,让你在事务管理中更加灵活。
此外,这次更新还引入了一个全新的SqlError对象,专门用于处理和标记 SQL 语句执行过程中可能出现的错误。这样一来,调试和错误处理变得更加直观和高效。
JavaScript ENUM 和 SET 支持
从 MySQL 9.2.0 开始,JavaScript 存储例程中的参数现在支持 MySQL 的 ENUM 和 SET 数据类型。这意味着你可以直接在 JavaScript 中使用这些数据类型,无论是作为参数传递还是进行处理,都变得更加方便和直观。这一改进为开发者提供了更多的灵活性和控制力,尤其是在处理复杂数据时。
EXPLAIN FORMAT=JSON 的版本信息
MySQL 9.2.0 为EXPLAIN FORMAT=JSON引入了 JSON 格式版本信息的支持。当你将格式版本设置为 2 时,输出中会包含与版本相关的详细信息,帮助你更全面地了解查询的执行情况。
你可以通过以下命令设置格式版本:
SET explain_json_format_version=2;
设置完成后,执行EXPLAIN FORMAT=JSON时,输出会显示类似以下的内容:
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)
不过,如果将格式版本设置为 1(默认版本),输出中则不会显示版本信息,示例如下:
SET 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)
通过调整格式版本,你可以灵活定制EXPLAIN FORMAT=JSON的输出内容,从而更好地调试和分析查询性能。这一功能为开发者提供了更强大的工具,帮助优化数据库查询效率。
MySQL 9.2 中弃用的功能
在 MySQL 9.2 中,部分功能已被标记为弃用,并可能在未来的版本中被移除。如果你正在使用这些功能,建议尽快调整应用程序,采用替代方案以避免潜在问题。
需要注意的是,如果从 MySQL 9.2 主服务器复制数据到运行更高版本的副本服务器,使用这些弃用功能可能会导致语句执行失败,或者主副服务器之间的处理效果不一致。因此,及时更新应用程序,避免使用这些弃用功能,是确保系统稳定性的关键。
FLUSH PRIVILEGES 被弃用
从 MySQL 9.2.0 开始,FLUSH PRIVILEGES语句已被标记为弃用。执行该语句时,系统会触发警告。预计在未来的 MySQL 版本中,这一功能将被彻底移除,因此建议尽早调整相关应用程序,避免依赖此语句。
与此同时,以下相关功能也在 MySQL 9.2.0 中被弃用:
FLUSH_PRIVILEGES权限:授予此权限时会触发警告。mysqladmin flush-privileges命令:执行该命令时会触发警告。mysqladmin reload命令:执行该命令时会触发警告。
此外,以下功能虽然没有明确触发警告,但也应被视为弃用:
- 使用
SIGHUP信号刷新权限。 - 通过
FLUSH PRIVILEGES刷新caching_sha2缓存。 - 使用
mysqladmin refresh刷新权限。
版本令牌插件
从 MySQL 9.2.0 开始,版本令牌插件(Version Tokens plugin)已被标记为弃用,并可能在未来的版本中被移除。如果你尝试安装version_tokens插件,或者启动包含该插件的服务器时,系统会触发弃用警告,提醒你这一功能即将被淘汰。
与此同时,以下与版本令牌插件相关的功能也被弃用,并在调用时触发警告:
被弃用的函数
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_sessionversion_tokens_session_number
MySQL 9.2 中移除的功能
在 MySQL 9.2 版本中,一些功能已被彻底移除,原因是它们被标记为过时功能。如果你仍在使用这些功能,建议尽快更新应用程序,采用替代方案,以避免潜在问题。
对于从 MySQL 9.1 主服务器复制到 MySQL 9.2 副本的场景,如果应用程序依赖这些已移除的功能,可能会导致相关语句执行失败,或者主副服务器之间的结果不一致。因此,及时调整应用程序,停止使用这些被移除的功能,是确保系统稳定性的关键。
BINLOG 关键字的使用限制
从 MySQL 9.2 版本开始,BINLOG被列为受限制的关键字。这意味着,如果你在存储例程或存储函数中直接使用BINLOG作为标签而不加引号,代码将无法正常运行。因此,在升级到 MySQL 9.2 之前,务必检查并更新你的应用程序代码,确保BINLOG关键字被正确使用。例如,可以通过加引号的方式来明确标识它,避免潜在的错误。
更多详细信息,请参考 MySQL 9.2 更新文档和变更文档。











最新评论
不卸载它,老莫名其妙跳出来。
nb,解决了Microsoft Store更新时错误码为0x8000000B的问题
创建帐户的时候设置啊,喵喵喵 😺~
后台管理密码是什么?docker部署如何获取后台管理密码或者如何配置后台管理密码?