MySQL9的3个新特性

news2024/12/22 23:02:29

【图书推荐】《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                   |
+--------------------------------------------+

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

出国读研,是否有必要选择与自己本科专业相关的研究方向?

出国读研时,选择什么专业,是否选择与自己本科专业相关的方向,是很多同学会考虑的问题。事实上这个问题没有标准答案,取决于个人的职业目标、兴趣及市场需求等多方面因素。今天我们就这一问题展开讨论,希望能给即将出国…

【渗透测试】-OAuth授权框架-burp

文章目录 1.Lab: Authentication bypass via OAuth implicit flow  2.Lab: Forced OAuth profile linking 1.Lab: Authentication bypass via OAuth implicit flow 通过 Burp 代理流量时,单击“我的帐户”并完成 OAuth 登录过程。之后,您将被重定向回博…

信息安全工程师(39)防火墙防御体系结构类型

前言 防火墙防御体系结构类型多样化,每种类型都针对不同的安全需求和应用场景,提供不同层次的保护。 一、传统防火墙系统 包过滤防火墙 原理:通过检查进出网络数据包的头信息(如源IP地址、目的IP地址、源端口、目的端口和协议等&a…

数据结构-4.4.朴素模式匹配算法

一.专业术语: 注:子串和模式串有区别。 二.朴素模式匹配算法: 思路:在主串中找出所有与模式串长度相等的子串,与模式串进行比较,如果找到了,返回子串第一个字符在主串的位置 1.使用字符串的基本…

大龄焦虑?35岁码农逆袭之路:拥抱大模型时代,焕发职业生涯新活力!

前言 其实我很早就对大龄程序员这个话题感到焦虑,担心自己35岁之后会面临失业,有时和亲戚朋友聊天时,也会经常拿这个出来调侃。现在身边已经有很多35岁左右的同事,自己过两年也会步入35岁的行列,反倒多了一份淡定和从…

【C++ 11】for 基于范围的循环

文章目录 【 1. 基本用法 】【 2. for 新格式的应用 】2.1 for 遍历字符串2.2 for 遍历列表2.3 for 遍历的同时修改元素 问题背景 C 11标准之前(C 98/03 标准),如果要用 for 循环语句遍历一个数组或者容器,只能套用如下结构&#…

AtCoder Beginner Contest 373

D - Hidden Weights 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #define fi first; #define se second;using namespace std;typedef long long LL; typedef pair<int,int> PII;const int N2e510; const LL lnf0x3f3f3f3f3f3f3…

【JavaEE】【多线程】Thread类讲解

目录 Thread构造方法Thread 的常见属性创建一个线程获取当前线程引用终止一个线程使用标志位使用自带的标志位 等待一个线程线程休眠线程状态线程安全线程不安全原因总结解决由先前线程不安全问题例子 Thread构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用…

WPS Office从路径穿越到远程代码执行漏洞(CVE-2024-7262)分析与复现

漏洞概述 WPS Office程序promecefpluginhost.exe存在不当路径验证问题&#xff0c;允许攻击者在Windows上加载任意Windows库文件。该漏洞已被APT-C-60攻击者利用&#xff0c;当用户打开MHTML格式的文档时&#xff0c;只需单击一个恶意制作的超链接&#xff0c;即可执行攻击者指…

【C++】map详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

如何实现小红点

文章目录 1. 概念介绍2. 实现方法3 示例代码我们在上一章回中介绍了WebView组件相关的内容,本章回中将介绍如何在图标旁边添加小红点.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在实际项目中有时候需要在图标旁边显示小红点,而且小红点内还有数字,比如购物车图标显…

Android阶段学习思维导图

前言 记录下自己做的一个对Android原生应用层的思维导图&#xff0c;方便个人记忆扩展&#xff1b;这里只露出二级标题。 后语 虽然有些内容只是初步了解&#xff0c;但还是记录了下来&#xff1b;算是对过去一段学习的告别。

全体起立!CEEMDAN-Kmeans-VMD-CNN-Attention双重分解+卷积神经网络注意力机制多元时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CEEMDAN-Kmeans-VMD-CNN-Attentionr融合K均值聚类的数据双重分解卷积神经网络注意力机制多元时间序列预测&#xff08;完整源码和数据&#xff09; 2.CEEMDAN分解&#xff0c;计算样本熵&#xff0c;根据…

Arduino UNO R3自学笔记23 之 Arduino如何使用4511控制数码管?

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:因为7段数码管控制需要用到7个IO,这会严重占用Arduino的IO口,因此我们采用现有IC来节省Arduino的IO口。 1.CD4511介绍 CD4511是一款用于驱动共阴极LED(数码管)显示器的BCD码-七段码译码器。它…

机器学习-支撑向量机SVM

Support Vector Machine 离分类样本尽可能远 Soft Margin SVM scikit-learn中的SVM 和kNN一样&#xff0c;要做数据标准化处理&#xff01; 涉及距离&#xff01; 加载数据集 import numpy as np import matplotlib.pyplot as plt from sklearn import datasetsiris datas…

CentOS7 虚拟机操作系统安装及相关配置教程

1、安装虚拟机 在VMware《主页》界面中点击《创建新的虚拟机》按钮&#xff1a; 选择你准备好的ISO文件&#xff0c;点击下一步&#xff1a; 然后填写虚拟机的名称以及虚拟机将来保存的位置&#xff1a; 再次下一步&#xff0c;填写虚拟机磁盘大小&#xff1a; 继续下一步&…

ES postman操作全量修改,局部修改,删除

全量修改 修改需要调用的url 地址是http://192.168.1.108:9200/shopping/_doc/1001&#xff0c;调用方法使用put 只修改指定的需求的内容的请求方式 post方式就是局部修改 http://192.168.1.108:9200/shopping/_update/1001&#xff0c;请求方式post 上图是只修改id 为1001数…

sqli-labs less-18 http头user-agent注入

HTTP头注入 常见的HTTP注入点产生位置为【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】 HTTP Referer是header头的一部分&#xff0c;从哪个网页了链接过来的 X-Forwarded-For 简称XXF头&#xff0c;代表客户端&#…

【计算机网络】Tcp/IP五层协议,Udp报文组成,Udp与Tcp的区别

Tcp/IP五层协议 TCP/IP模型是计算机网络的核心协议之一&#xff0c;通常被分为五层&#xff0c;每一层都有其独特的功能和作用。以下是TCP/IP模型的五层协议的简要描述&#xff1a; 物理层&#xff1a;这一层涉及实际的物理连接&#xff0c;定义了硬件传输介质的特性&#xff…

网络安全现在的前景是如何的?_网络安全技术研究生可否从事大数据工作

从当前的人才培养体系来看&#xff0c;网络安全人才的培养既有本科教育和专科教育&#xff0c;同时也有研究生教育&#xff0c;所以要想成为网络安全人才&#xff0c;途径还是比较多的&#xff0c;可以根据自身的实际情况来选择不同的教育方式。对于当前的职场人来说&#xff0…