当前位置: 首页 > news >正文

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

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个新特性

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 本文讲解MySQL9的3个新特性&…...

《网络基础之 HTTP 协议:状态码含义全解析》

《网络基础之 HTTP 协议:状态码含义全解析》 在网络通信的浩瀚世界中,HTTP 协议犹如一座坚实的桥梁,连接着客户端与服务器。而其中的状态码,则是这座桥梁上的重要标识,为双方的交互提供了关键的反馈信息。 一、状态码…...

java真的正在越来越失去竞争力了吗

题记: java真的在越来越失去竞争力了吗?最近参加校招面试,过程中有问道java的问题,有的同学很直接了当(或者是不假思索)地说,java已经过时了吧,现在学java的人越来越少了。那么事实…...

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载:mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…...

每日OJ题_WY3小易的升级之路_数学模拟_C++_Java

目录 牛客_WY3小易的升级之路_数学模拟 题目解析 C代码 Java代码 牛客_WY3小易的升级之路_数学模拟 小易的升级之路_牛客题霸_牛客网 (nowcoder.com) 描述: 小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段…...

python xml的读取和写入

import xml.etree.ElementTree as ET from xml.dom import minidom# 读取XML文档 tree ET.parse("./xml_3/z_20240827_001.xml") root tree.getroot() # 获取size元素 size_find_0 root.find("size") # 获取width子元素 size_w size_find_0.find("…...

WebGL 小白入门学习

1. WebGL是什么? WebGL(Web Graphics Library)是一种JavaScript API,它允许你在不需要安装任何额外插件的情况下,直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元(GPU)来…...

OSI七层协议

OSI(Open System Interconnection)七层协议,即开放式系统互联参考模型,是一个由国际标准化组织(ISO)提出的用于描述计算机网络中通信的结构和功能的理论模型。它将网络通信过程分为七个层次,每个…...

超平面(Hyperplane)和半空间(Halfspace)

文章目录 一、超平面(Hyperplane)1. 定义2. 超平面的方程3. 例子4. 超平面的性质 二、半空间(Halfspace)1. 定义2. 半空间的表示3. 半空间的性质 三、超平面与半空间的关系四、应用1. 线性规划2. 机器学习3. 计算几何4. 凸分析 五…...

TCP(Transmission Control Protocol,传输控制协议)整理

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输协议,它是OSI(Open System Interconnection,开放式系统互联)模型中的第四层协议,通常使用于网络中的…...

R语言绘制线性回归图

线性回归图以二维坐标系展示两个变量关系。数据点代表实际观测值,核心是线性回归线。此线通过统计方法确定,与数据点距离平方和最小。它反映变量间线性趋势,斜率正负决定相关方向。可用于预测因变量值,也能进行推断统计。在数据分…...

C++进阶:map和set的使用

目录 一.序列式容器和关联式容器 二.set系列的使用 2.1set容器的介绍 2.2set的构造和迭代器 2.3set的增删查 2.4insert和迭代器遍历的样例 2.5find和erase的样例 ​编辑 2.6multiset和set的差异 2.7简单用set解决两道题 两个数组的交集 环形链表二 三.map系列的使用…...

深入理解C++ STL中的 vector

文章目录 1. vector 的概述1.1 vector 是什么?1.2 vector 的优点1.3 vector 的缺点 2. vector 的基本使用2.1 vector 的定义2.2 基本操作2.3 示例2.4 迭代器的使用 3. vector 的内部实现原理3.1 动态数组的实现3.2 内存管理3.3 内存扩展策略3.4 元素的插入与删除3.4…...

MySQL 安装与配置详细教程

MySQL 安装与配置详细教程 MySQL 是一款流行的关系型数据库管理系统,广泛应用于 Web 应用和应用程序中。在本文中,我们将提供一份详细的 MySQL 安装与配置教程,帮助初学者快速上手。 ## 1. 安装 MySQL 首先,我们需要从 MySQL 官…...

理解智能合约:区块链在Web3中的运作机制

随着区块链技术的不断发展,“智能合约”这一概念变得越来越重要。智能合约是区块链应用的核心之一,正在推动Web3的发展,为数字世界带来了前所未有的自动化和信任机制。本文将深入探讨智能合约的基本原理、运作机制,以及它在Web3生…...

QT工程概述

在Qt中,创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围: MainWindow:这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序,需要这些额外的用户…...

redis安装 | 远程连接

1.redis的安装 在Ubuntu下安装redis【网址】使用root账号使用apt来安装。使用apt安装比较的方便,但是安装的版本可能就不是最新的版本。 $ su root $ apt list --installed | grep redis # 查看是否安装 $ apt search redis # 查看apt中的redis版本 $ apt install…...

性价比高的宠物空气净化器应该怎么挑?有哪几款推荐?

前几年和朋友住在一起之后就一起养了两只猫,没想到刚开始还好,到后期之后,我和朋友都苦不堪言,有泪都流不出。 主要是猫咪掉毛实在是太严重了,下班回去之后,发现朋友在打扫家里,又是擦又是扫的…...

Golang | Leetcode Golang题解之第466题统计重复个数

题目&#xff1a; 题解&#xff1a; func getMaxRepetitions(s1 string, n1 int, s2 string, n2 int) int {n : len(s2)cnt : make([]int, n)for i : 0; i < n; i {// 如果重新给一个s1 并且s2是从第i位开始匹配 那么s2可以走多少位&#xff08;走完了就从头开始走p1, p2 :…...

设计模式 - 行为模式

行为模式 观察者模式&#xff0c;策略模式&#xff0c;命令模式&#xff0c;中介者模式&#xff0c;备忘录模式&#xff0c;模板方法模式&#xff0c;迭代器模式&#xff0c;状态模式&#xff0c;责任链模式&#xff0c;解释器模式&#xff0c;访问者模式 保存/封装 行为/请求…...

ScintillaNET:提升开发效率的专业代码编辑组件深度解析

ScintillaNET&#xff1a;提升开发效率的专业代码编辑组件深度解析 【免费下载链接】ScintillaNET A Windows Forms control, wrapper, and bindings for the Scintilla text editor. 项目地址: https://gitcode.com/gh_mirrors/sc/ScintillaNET 核心价值定位&#xff1…...

10个libxev实战技巧:从定时器到TCP服务器的完整实现

10个libxev实战技巧&#xff1a;从定时器到TCP服务器的完整实现 【免费下载链接】libxev libxev is a cross-platform, high-performance event loop that provides abstractions for non-blocking IO, timers, events, and more and works on Linux (io_uring or epoll), macO…...

人脸识别系统如何利用图像质量评估提升准确率?5个实战场景解析

人脸识别系统如何利用图像质量评估提升准确率&#xff1f;5个实战场景解析 在光线昏暗的便利店监控画面中&#xff0c;一位戴着口罩的顾客突然抬头看向摄像头——这个瞬间能否被准确识别&#xff0c;往往取决于系统对人脸图像质量的实时判断能力。图像质量评估&#xff08;FQA&…...

Obsidian插件终极汉化指南:obsidian-i18n让英文插件秒变中文界面

Obsidian插件终极汉化指南&#xff1a;obsidian-i18n让英文插件秒变中文界面 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 你是否因为Obsidian插件的英文界面而头疼&#xff1f;面对"Backlink"、"Graph …...

RAGFlow图片回答避坑指南:为什么不用Base64和阿里云OSS?

RAGFlow图片回答架构设计&#xff1a;从Base64到容器化服务器的技术演进 当RAG系统需要处理包含图片的回答时&#xff0c;技术选型直接关系到系统的性能、安全性和可维护性。本文将深入探讨几种主流方案的优劣对比&#xff0c;并解析为何容器化图片服务器成为当前最优解。 1. 图…...

应对维普AIGC史诗级升级:2026降重急救包!5款工具基准测试 x 4大手改重构技巧

论文初稿快要交了&#xff0c;维普却突然搞了个大动作&#xff0c;把系统给升级了。说实话&#xff0c;这事真挺让人头疼的&#xff0c;有人前两天查还是绿的&#xff0c;以为稳了&#xff0c;结果升级完再一测&#xff0c;AI率直接飙红。 但别慌&#xff0c;也别怀疑自己是不…...

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示:同一instruct跨语言声线迁移能力验证

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示&#xff1a;同一instruct跨语言声线迁移能力验证 你有没有想过&#xff0c;同一个声音描述&#xff0c;比如“温柔的成年女性声音”&#xff0c;用中文说出来是一种感觉&#xff0c;用英文、日文说出来&#xff0c;会不会还是同一种感…...

Phi-4-mini-reasoning在ollama中启用flash attention:推理速度提升实测报告

Phi-4-mini-reasoning在ollama中启用flash attention&#xff1a;推理速度提升实测报告 你是否遇到过这样的场景&#xff1a;部署了一个轻量级推理模型&#xff0c;满怀期待地输入问题&#xff0c;结果等待了十几秒才得到回复&#xff1f;对于需要快速响应的应用&#xff0c;比…...

PCL2-CE社区版启动器:终极指南打造个性化Minecraft游戏中心

PCL2-CE社区版启动器&#xff1a;终极指南打造个性化Minecraft游戏中心 【免费下载链接】PCL-CE PCL2 社区版&#xff0c;可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL-CE PCL2-CE社区版启动器是一款功能强大的开源Minecraft启动工具&…...

Chord - Ink Shadow 跨模态应用探索:连接文本与MATLAB科学计算

Chord - Ink & Shadow 跨模态应用探索&#xff1a;连接文本与MATLAB科学计算 你有没有过这样的经历&#xff1f;面对一堆实验数据&#xff0c;脑子里已经想好了要画个什么样的图来分析&#xff0c;但打开MATLAB&#xff0c;却卡在了写代码这一步。复杂的函数名、繁琐的语法…...