当前位置: 首页 > article >正文

MySQL上新:MySQL 9.1.0发布

MySQL 9.1.0 已经于 2024 年 10 月 15 日正式发布。这是一个创新版本,增加了一些新功能、修复了一些问题并且弃用了一些旧功能。

同时发布的还有 MySQL 8.4.3 以及 MySQL 8.0.40。

以下是该版本包含的部分更新。

原子DDL

在该版本之前,虽然 CREATE DATABASE 以及 DROP DATABASE 具有原子性,但是并非具有完全崩溃安全性,可能导致以下问题:

  • 如果 CREATE DATABASE 语句在创建数据库目录之后,但没有提交事务之前失败,数据字典不会感知该数据库的存在。此时,文件系统中的数据库目录需要手动清除。
  • 如果文件系统错误或者异常关闭导致 DROP DATABASE 语句没有成功删除数据库目录,事务并非总会回滚。此时也需要手动干预解决问题。

从新版开始,只要涉及的数据库都使用支持原子 DDL 语句的存储引擎(例如 InnoDB),这些语句就会具有完全的原子性和崩溃安全性。

SQL函数

修复了 UNION 查询中 DATABASE() 函数结果被截断的缺陷。

修复了 SUM() 函数某些情况下指定 DISTINCT 选项时的错误,例如:

mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');
+--------------+-----------------------+
| sum(b'1100') | sum(DISTINCT b'1100') |
+--------------+-----------------------+
|           12 |                     9 |
+--------------+-----------------------+

这个问题的原因在于使用了 DISTINCT 时会创建一个临时表,用于数据去重。该版本之前的临时表没有考虑数据类型和长度,导致了数据问题,新版本解决了这个问题。

SQL语法

在该版本之前允许以下形式的查询:

SELECT test.dt.a FROM (SELECT 1 AS a) AS dt;

该查询使用了 db_name.tbl_name.col_name 引用派生表中的字段,这种形式违反了 SQL 标准。与此类似的还有通用表表达式中的字段引用。新版本不再支持这种语法。

新版本增加了 CREATE VIEW 语句的 IF NOT EXISTS 选项。如果被创建的视图不存在,直接创建视图;如果视图已经存在,该语句显示成功执行,但是不会修改视图定义,并且会产生一个警告信息:

mysql> CREATE VIEW v1 AS SELECT c1, c3 FROM t1;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE VIEW v1 AS SELECT c2 FROM t1;
ERROR 1050 (42S01): Table 'v1' already exists

mysql> CREATE VIEW IF NOT EXISTS v1 AS SELECT c2 FROM t1;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SHOW WARNINGS;
+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 'v1' already exists |
+-------+------+---------------------------+
1 row in set (0.00 sec)

mysql> SHOW CREATE VIEW v1\G
*************************** 1. row ***************************
                View: v1
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`vuser`@`localhost` SQL 
SECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c3` AS `c3` from `t1`
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

IF NOT EXISTS 选项和 OR REPLACE 选项不兼容,一个 CREATE VIEW 语句中不能同时指定这两个子句。

向量数据类型

新版本中的 STRING_TO_VECTOR() 函数允许字符形式的 VECTOR 数据中包含尾部空白符。解析器可以截断数字以及中括号前后的空白符,例如:

  • “[1 ,2]”
  • “[1,2 ]”
  • " [1,2]"
  • "[1,2] "

新版本中的 JavaScript 存储程序完全支持 VECTOR 类型,包括输入参数、输出参数、预编译语句 bind() 参数以及返回结果。

完整信息

以上只是介绍了部分更新,完整内容可以参考发现说明:

https://dev.mysql.com/doc/relnotes/mysql/9.1/en/news-9-1-0.html


http://www.kler.cn/news/358209.html

相关文章:

  • Ubuntu下安装并初始化Git同时添加SSH密钥
  • 排序算法 —— 直接插入排序
  • Damn-Vulnerable-Drone:一款针对无人机安全研究与分析的靶机工具
  • 深度学习:终身学习(Life-Long Learning)详解
  • 域7:安全运营 第17章 事件的预防和响应
  • 【热门主题】000006 案例 探索云原生后端:创新与挑战
  • 手写Spring IOC-简易版
  • 集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例
  • 数据清洗(脚本)
  • 【Linux】从多线程同步到生产者消费者模型:多线程编程实践
  • 零代码快速开发智能体 |甘肃旅游通
  • 【str_replace替换导致的绕过】
  • Windows和Linux在客户端/服务端在安全攻防方面的区别
  • 路由表来源(基于华为模拟器eNSP)
  • web前端--html 5---qq注册
  • 基于SpringBoot+Vue+MySQL的社区医疗管理系统
  • 【linux】GCC 7和GCC 8版本不再包含在默认的软件仓库中
  • hi3798mv100 linux 移植
  • Rocky Linux 9安装后无法远程ssh密码登录解决
  • 网盘直链下载神器NDM