写点什么

MySQL9 的 3 个新特性

  • 2024-10-09
    福建
  • 本文字数:2209 字

    阅读完需:约 7 分钟

本文讲解 MySQL9 的 3 个新特性:支持将 JSON 输出保存到用户变量、支持准备语句以及支持面向 AI 的向量存储。


17.12 MySQL9 新特性 1——支持将 JSON 输出保存到用户变量


从 MySQL 9 版本开始支持将 EXPLAIN FORMAT 的 JSON 输出保存到用户变量,下面通过一个案例来理解该新特性。


创建演示数据表 tb,SQL 语句如下:


CREATE TABLE tb(id      INT,name   VARCHAR(25));
复制代码


插入演示数据,SQL 语句如下:


INSERT INTO tb (id ,name) VALUES (1,'电视机') ,(2,'空调');
复制代码


将 EXPLAIN FORMAT 的 JSON 输出保存到用户变量 @myvariable 中,SQL 语句如下:


EXPLAIN FORMAT =JSON INTO @myvariable
UPDATE tb SET name = "洗衣机" WHERE id =2;
复制代码


查看用户变量 @myvariable,执行结果如下:


mysql> SELECT @myvariable\G
*************************** 1. row ***************************
@myvariable: {
"query_block": {
"select_id": 1,
"table": {
"update": true,
"table_name": "tb",
"access_type": "ALL",
"rows_examined_per_scan": 2,
"filtered": "100.00",
"attached_condition": "(`test_db`.`tb`.`id` = 2)"
}
}
}
复制代码


7.13 MySQL9 新特性 2——支持准备语句


MySQL 9.0 支持准备语句(Prepared Statements),这是一种预编译的 SQL 语句,可以包含占位符,这些占位符在执行时会被实际的值替换。准备语句的优势如下:


(1) 准备语句可以提高性能,因为 SQL 解析和编译只发生一次,然后可以被多次执行,每次都可以使用不同的参数。


(2) 准备语句能增强应用程序的安全性,因为它们有助于防止 SQL 注入攻击。


下面通过案例来理解准备语句的使用方法。


使用 PREPARE 语句准备一个 SQL 语句模板,‌该模板可以包含一个或多个占位符(‌?)‌。‌


mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';mysql> PREPARE stmt1 FROM @s;
复制代码


使用 SET 语句为占位符设置具体的值。


mysql> SET @a = 6;mysql> SET @b = 8;
复制代码


使用 EXECUTE 语句执行准备好的 SQL 语句,‌并用之前设置的参数替换占位符。‌


mysql> EXECUTE stmt1 USING @a, @b;+------------+| hypotenuse |+------------+|       10   |+------------+
复制代码


执行完成后,‌使用 DEALLOCATE PREPARE 语句释放准备好的语句。‌


mysql> DEALLOCATE PREPARE stmt1;
复制代码


准备语句还可以用于动态选择需要查询的表,通过将表名作为用户变量,并在执行时替换到 SQL 语句中。例如,通过设置用户变量 @table 的值为表名,然后构造一个包含该表名的 SQL 查询字符串,最后使用 PREPARE 和 EXECUTE 语句执行该查询。这种灵活性使得准备语句在处理动态 SQL 场景时非常有用。


7.14  MySQL9 新特性 3——支持面向 AI 的向量存储


MySQL 9.0 增加了一个新的向量数据类型:VECTOR。它是一种可以存储 N 个数据项的数据结构(数组),语法格式如下:


VECTOR(N)


其中,每个数据项都是一个 4 字节的单精度浮点数。默认的数据项为 2048 个,最大值为 16383。


向量类型的数据可以使用二进制字符串或者列表分隔的字符串表示,例如:


CREATE TABLE mytb1(id int, rgb vector(3));INSERT INTO mytb1 VALUES (1, to_vector('[255,255,255]'));INSERT INTO mytb1 VALUES (2, to_vector('[128,255,0]'));INSERT INTO mytb1 VALUES (3, to_vector('[0,65,225]'));
复制代码


MySQL 9.0 同时还增加了一些用于操作 VECTOR 数据的向量函数。


1. STRING_TO_VECTOR 函数


STRING_TO_VECTOR 函数用于将字符串形式的向量数据转换为二进制,STRING_TO_VECTOR 函数的参数是一个字符串,包含一组由逗号分隔的浮点数,并且使用方括号([])进行引用。例如:


mysql> SELECT HEX(STRING_TO_VECTOR("[1.08, -18.8, 88]"));+--------------------------------------------+| HEX(STRING_TO_VECTOR("[1.08, -18.8, 88]")) |+--------------------------------------------+| 713D8A3F666696C10000B042                   |+--------------------------------------------+
复制代码


2. VECTOR_TO_STRING 函数


VECTOR_TO_STRING 函数用于将向量数据转换为字符串。例如:


mysql> SELECT VECTOR_TO_STRING(STRING_TO_VECTOR("[1.08, -18.8, 88]"));+---------------------------------------------------------+| VECTOR_TO_STRING(STRING_TO_VECTOR("[1.08, -18.8, 88]")) |+---------------------------------------------------------+| [1.08000e+00,-1.88000e+01,8.80000e+01]                  |+---------------------------------------------------------+
mysql> SELECT VECTOR_TO_STRING(0x00000040000040444000A0400000E400);+------------------------------------------------------+| VECTOR_TO_STRING(0x00000040000040444000A0400000E400) |+------------------------------------------------------+| [2.00000e+00,7.68000e+02,5.00003e+00,2.09385e-38] |+------------------------------------------------------+
复制代码


输出结果中的浮点数使用科学计数法表示。


3. VECTOR_DIM 函数


VECTOR_DIM 函数用于返回向量数据的维度,也就是数据项的个数。例如:


mysql> SELECT VECTOR_DIM(rgb) FROM mytb1;+-----------------+| VECTOR_DIM(rgb) |+-----------------+|            3    ||            3    ||            3    |+-----------------+
复制代码


文章转载自:brucexia

原文链接:https://www.cnblogs.com/brucexia/p/18451353

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
MySQL9的3个新特性_MySQL_快乐非自愿限量之名_InfoQ写作社区