本文讲解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 |
+--------------------------------------------+

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

MySQL9的3个新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  10. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

随机推荐

  1. 【VMware VCF】VMware Cloud Foundation Part 03:准备 Excel 参数表。

    VMware Cloud Foundation 使用 VMware Cloud Builder 工具完成自动化以及标准化的部署,除了要准备必须的用于部署管理域并运行管理相关组件的 ESXi 主机以外, ...

  2. 前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线

    本章响应小伙伴的反馈,除了算法自动画连接线(仍需优化完善),实现了可以手动绘制直线.折线连接线功能. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ ...

  3. 对比python学julia(第一章)--(第六节)数字黑洞

    6.1. 问题描述 6174数字黑洞是印度数学家卡普雷卡尔于1949年发现的,又称为卡普雷卡尔黑洞,其规则描述如下. 任意取一个4位的整数(4个数字不能完全相同),把4个数字由大到小排列成一个大的数, ...

  4. 【Hessian】轻量级分布式通信组件

    参考自简书 https://www.jianshu.com/p/9136aa36cffb 案例场景为单向通信 A 和 B两个应用服务, B需要调用A的接口完成业务需求 那么A服务角色就是服务端,提供给 ...

  5. 【Spring】09 后续的学习补充 vol3

    原生JDBC事务: package dao; import cn.dzz.util.DruidUtil; import org.apache.commons.dbutils.QueryRunner; ...

  6. Jax框架:通过显存分析判断操作是否进行jit编译

    相关: https://jax.readthedocs.io/en/latest/device_memory_profiling.html 代码: import jax import jax.nump ...

  7. pygame游戏:python版本的贪吃蛇游戏 —— Python 贪吃蛇魔改大赛

    在网上找python版本的贪吃蛇游戏,看到一个Gitee Community / Python 贪吃蛇魔改大赛,感觉还不错,这里收藏下. 一等奖 1名 Snake Quest 蛇蛇闯关: jeffya ...

  8. 如何对MIL-STD-1553B进行选型

    MIL-STD-1553B产品选型是一个复杂而细致的过程,‌需要综合考虑多个因素以确保所选产品能够满足特定应用场景的需求. 一.‌引言 MIL-STD-1553B作为一种广泛应用于航空航天领域的数据总 ...

  9. quartz监控日志(三)查看卡死线程堆栈 转

    我们经常碰到一些定时任务卡死或者执行时间很长,这样的问题我们排查手段比较常用的是jstack命令 来查看线程堆栈,然后根据我们监控中的threadId或者threadName来查找线程详细堆栈看卡在哪 ...

  10. 看了这几个C语言例子,你一定和我一样连说5个卧槽,声音一次比一次大

    曾经我一直以为自己C语言学的还挺好的,直到看到这几个例子. 例1 首先来看一下,大师是如何求圆周率的,一口君实在词穷,first卧槽. #include <stdio.h> long a= ...