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    |
+-----------------+

相关推荐
工程师老罗4 小时前
如何在Android工程中配置NDK版本
android
Libraeking7 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位8 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1239 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs10 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob10 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔10 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99610 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly12 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首13 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节