MySQL创新版9.1.0于2024年10月15日正式发布。此外,MySQL8.0.40及8.4.3补丁版本也同时发布。8.4.3是目前MySQL的LTS长期支持版本,该版本中将不会增加新的功能与特性,仅提供错误修复。新功能与新特性仅在创新版中发布。让我们一起快速浏览一下9.1.0中有哪些新的内容。
DDL原子性: MySQL已经支持DDL操作的原子性,但是在之前版本中的「CREATE DATABASE」 和 「DROP DATABASE」并没有实现真正的崩溃安全,原因在于当操作系统上的数据库目录创建后如果「CREATE DATABASE」语句没有成功提交,该目录并不会删除,需要手动进行删除,反之,目录删除后,「DROP DATABASE」没有成功提交会造成系统错误。该问题已经在新版本中解决。
审计和防火墙 :在之前的版本中,审计和防火墙功能会认为非字母开头的用户名称为无效用户,例如,「$foo」。在该版本中已解决该问题。
关于编译 :编译部分中修复了大量的兼容性问题,并作出一些改进,其中「SQL_I_list」 使用成员字段 「next」 来跟踪指向下一个对象的指针,该指针字段在构造列表对象时初始化为成员字段的地址。默认的赋值运算符采用的是成员级赋值,只有使用常规构造函数构造的列表对象才适用,这不适用于空列表。因此,新版本通过提供自定义的移动构造函数和赋值操作符函数来解决这个问题。此外,新版本还将「save_and_clear()」的实现更改为使用「std::move()」而不是赋值操作。感谢腾讯团队和Xingyu Yang对该修复的贡献。
SQL函数与操作 :
新版本解决了当将DATABASE()函数用作 UNION 查询的一部分时输出被截断问题。
在某些情况下,当使用DISTINCT时,相同的值进行SUM()会产生不同的结果。例如,
mysql> SELECT SUM(b'1100'), SUM(DISTINCT b'1100');+--------------+-----------------------+| sum(b'1100') | sum(DISTINCT b'1100') |+--------------+-----------------------+|12 |9 |+--------------+-----------------------+
这是因为在使用「DISTINCT」时,会创建一个临时的表用于保存值,以便在最后将产生唯一的值返回给用户。之前创建这样的表时,没有考虑到已经确定的数据类型和长度,对它们重新计算。现在则考虑已经确定的数据类型和长度。
JavaScript:
let result = session.runSql("SELECT * FROM t")for (let row of result) {console.log(row.c1+row.c3);}
JavaScript现在完全支持VECTOR类型存储程序。向量现在可以用作输入参数,输出参数,预处理语句bind()参数,并返回值。
Keyring :
从所有MySQL密匙环相关的组件中移除 对不安全的AES ECB的支持。
可插拔认证 :
「SET PERSIST」中解决了「Authentication_ldap_simple_bind_root_pwd =password」没有实际保存密码的错误。
SQL语法 :
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 existsmysql> 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` SQLSECURITY DEFINER VIEW `v1` AS select `t1`.`c1` AS `c1`,`t1`.`c3` AS `c3` from `t1`character_set_client: utf8mb4collation_connection: utf8mb4_0900_ai_ci1 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] "
组复制 :在下列情况下添加了新的INFO级别日志消息:
1、当一个动作开始在所有节点
2、当发送消息被阻塞而等待完成动作
3、当收到消息和内部消息时计数器递减
为了保持输出的一致性,当「explain_json_format_version=2」,以及当使用「EXPLAIN FORMAT=」TREE时, 「EXPLAIN FORMAT=JSON」为「lookup_condition」所显示的条件中的「=」符号前后都添加了空格。
以上内容是MySQL9.1.0为大家带来的新内容,除此之外还有大量的错误修复,详细信息请访问官网手册。