MySQL9的3个新特性

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客

《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

本文讲解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)"
    }
  }
}

17.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                   |
+--------------------------------------------+
  1. 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]    |
+------------------------------------------------------+

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

  1. VECTOR_DIM 函数

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

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

相关推荐
Sugobet2 小时前
【安卓][Mac/Windows】永久理论免费 无限ip代理池 - 适合临时快速作战
android·tcp/ip·macos·网络安全·渗透测试·ip代理池·接入点
fatiaozhang95276 小时前
创维智能融合终端SK-M424_S905L3芯片_2+8G_安卓9_线刷固件包
android·电视盒子·刷机固件·机顶盒刷机
来来走走7 小时前
Flutter开发 了解Scaffold
android·开发语言·flutter
哆啦A梦的口袋呀8 小时前
Android 底层实现基础
android
闻道且行之8 小时前
Android Studio下载及安装配置
android·ide·android studio
alexhilton9 小时前
初探Compose中的着色器RuntimeShader
android·kotlin·android jetpack
小墙程序员9 小时前
kotlin元编程(二)使用 Kotlin 来生成源代码
android·kotlin·android studio
小墙程序员9 小时前
kotlin元编程(一)一文理解 Kotlin 反射
android·kotlin·android studio
fatiaozhang952710 小时前
创维智能融合终端DT741_移动版_S905L3芯片_安卓9_线刷固件包
android·电视盒子·刷机固件·机顶盒刷机
小林学Android12 小时前
Android四大组件之Activity详解
android