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

【MySQL】MySQL中的函数之JSON_ARRAY_APPEND

在 MySQL 8.0 及更高版本中,JSON_ARRAY_APPEND() 函数用于在 JSON 数组的指定位置追加一个或多个值。这个函数非常有用,特别是在你需要在 JSON 数组的末尾或特定位置添加新的元素时。

基本语法

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
  • json_doc: 要修改的 JSON 文档。
  • path: 要追加值的路径。路径必须指向一个数组。
  • val: 要追加的新值。

示例

假设有一个表 users,其中有一个字段 data 存储了用户的 JSON 数据:

CREATE TABLE users (id INT PRIMARY KEY,data JSON
);INSERT INTO users (id, data) VALUES
(1, '{"name": "Alice", "age": 30, "hobbies": ["reading", "traveling"]}'),
(2, '{"name": "Bob", "age": 25, "hobbies": ["gaming", "coding"]}');
示例 1: 向 JSON 数组中追加一个值

假设我们要向 id 为 1 的用户的 hobbies 数组中追加一个新的爱好 “cooking”:

UPDATE users
SET data = JSON_ARRAY_APPEND(data, '$.hobbies', 'cooking')
WHERE id = 1;

查询结果:

SELECT * FROM users;

输出结果:

+----+------------------------------------------------------------+
| id | data                                                       |
+----+------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 30, "hobbies": ["reading", "traveling", "cooking"]} |
| 2  | {"name": "Bob", "age": 25, "hobbies": ["gaming", "coding"]}                             |
+----+------------------------------------------------------------+
示例 2: 向 JSON 数组中追加多个值

假设我们要向 id 为 2 的用户的 hobbies 数组中追加两个新的爱好 “painting” 和 “music”:

UPDATE users
SET data = JSON_ARRAY_APPEND(data, '$.hobbies', 'painting', '$.hobbies', 'music')
WHERE id = 2;

查询结果:

SELECT * FROM users;

输出结果:

+----+------------------------------------------------------------------+
| id | data                                                             |
+----+------------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 30, "hobbies": ["reading", "traveling", "cooking"]} |
| 2  | {"name": "Bob", "age": 25, "hobbies": ["gaming", "coding", "painting", "music"]} |
+----+------------------------------------------------------------------+
示例 3: 向嵌套的 JSON 数组中追加值

假设 JSON 数据中包含嵌套的数组:

INSERT INTO users (id, data) VALUES
(3, '{"name": "Charlie", "age": 35, "projects": [{"name": "Project A", "tasks": ["task1", "task2"]}, {"name": "Project B", "tasks": ["task3", "task4"]}] }');

我们可以向 id 为 3 的用户的 projects 数组中的第一个项目的 tasks 数组中追加一个新的任务 “task5”:

UPDATE users
SET data = JSON_ARRAY_APPEND(data, '$.projects[0].tasks', 'task5')
WHERE id = 3;

查询结果:

SELECT * FROM users;

输出结果:

+----+-------------------------------------------------------------------------------------------------------------------------+
| id | data                                                                                                                    |
+----+-------------------------------------------------------------------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 30, "hobbies": ["reading", "traveling", "cooking"]}                                            |
| 2  | {"name": "Bob", "age": 25, "hobbies": ["gaming", "coding", "painting", "music"]}                                       |
| 3  | {"name": "Charlie", "age": 35, "projects": [{"name": "Project A", "tasks": ["task1", "task2", "task5"]}, {"name": "Project B", "tasks": ["task3", "task4"]}] } |
+----+-------------------------------------------------------------------------------------------------------------------------+

注意事项

  • JSON_ARRAY_APPEND() 只能在 JSON 数组的末尾追加值。如果路径指向的不是数组,JSON_ARRAY_APPEND() 将返回 NULL
  • 如果路径不存在,JSON_ARRAY_APPEND() 也不会修改 JSON 文档。
  • 如果需要在数组的特定位置插入值,可以使用 JSON_INSERT()JSON_SET() 函数。

组合使用

JSON_ARRAY_APPEND() 通常与其他 JSON 函数结合使用,以便更灵活地处理 JSON 数据。例如,你可以先使用 JSON_EXTRACT() 提取值,然后使用 JSON_ARRAY_APPEND() 修改值。

相关文章:

【MySQL】MySQL中的函数之JSON_ARRAY_APPEND

在 MySQL 8.0 及更高版本中,JSON_ARRAY_APPEND() 函数用于在 JSON 数组的指定位置追加一个或多个值。这个函数非常有用,特别是在你需要在 JSON 数组的末尾或特定位置添加新的元素时。 基本语法 JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ..…...

torch.is_nonzero(input)

torch.is_nonzero(input) input: 输入张量 若输入是 不等于零的单元素张量 则返回True,否则返回False 不等于零的单元素张量:torch.tensor([0.]) 或 torch.tensor([0]) 或 torch.tensor([False])单元素张量: 只有一个数 的张量 import torch print(t…...

文本搜索程序(Qt)

头文件 #ifndef TEXTFINDER_H #define TEXTFINDER_H#include <QWidget> #include <QFileDialog> #include <QFile> #include <QTextEdit> #include <QLineEdit> #include <QTextStream> #include <QPushButton> #include <QMess…...

使用 Python 剪辑视频的播放速度

要使用 Python 调整视频的播放速度&#xff0c;可以利用 moviepy 库中的 fx&#xff08;特效&#xff09;模块来实现这一功能。通过 moviepy.editor 中的 VideoFileClip 类和 fx.speedx 函数&#xff0c;可以轻松地调整视频的播放速度。 安装 moviepy 首先&#xff0c;确保已…...

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序&#xff0c;要经过预处理、编译&#xff0c;汇编和链接四个过程。大家可以思考下&#xff0c;为什么要有这样的过程&#xff1f; 我们学习计算机之处&#xff0c;就应该了解到&#xff0c;计算机能够识别的只有二进制语言&#xff08;这是…...

Linux开发者的CI/CD(11)jenkins变量

文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…...

深度学习视频编解码开源项目介绍【持续更新】

DVC (Deep Video Compression) 介绍&#xff1a;DVC (Deep Video Compression) 是一个基于深度学习的视频压缩框架&#xff0c;它的目标是通过深度神经网络来提高视频编码的效率&#xff0c;并降低比特率&#xff0c;同时尽可能保持视频质量。DVC 是一个端到端的神经网络模型&…...

Canva迁移策略深度解析:应对每日5000万素材增长,从MySQL到DynamoDB的蜕变

随着数字化设计的蓬勃发展&#xff0c;Canva作为一款备受欢迎的在线设计平台&#xff0c;面临着日益增长的用户生成内容挑战。每天&#xff0c;平台上新增的素材数量高达5000万&#xff0c;这对数据库系统提出了前所未有的要求。为了应对这一挑战&#xff0c;Canva决定对其数据…...

nacos常见面试题(2024)

nacos永久实例与临时实例区别 nacos实例有2种&#xff0c;分别为临时实例&#xff08;一般业务服务是临时的&#xff09;和永久实例&#xff08;如mysql、redis这种运维服务需要实时看到状态的设置为永久实例&#xff09;。 临时实例只会缓存到服务注册列表中&#xff0c;下线…...

68000汇编实战01-编程基础

文章目录 简介产生背景应用领域 语言学习EASy68K帮助文档IDE使用 编程语言commentslabels开始标签指令标签位置标签 opcode 操作码常用操作码数据传送算术运算逻辑运算控制流分支跳转地址跳转子程序跳转 位操作比较堆栈操作 IO操作码其他操作码 directives 指令DC指令EQU 指令S…...

你的网站真的安全吗?如何防止网站被攻击?

你的网站被黑客攻击过&#xff0c;很可能不止一次&#xff01; 这可不是危言耸听。微软最近发布了《2024 年微软数字防御报告》&#xff0c;报告中写到&#xff1a;“Windows 用户每天面临超过 6 亿次网络犯罪和国家级别的攻击&#xff0c;涵盖了从勒索软件到网络钓鱼再到身份…...

UE5 材质编辑器CheapContrast 节点

在 Unreal Engine 材质编辑器中&#xff0c;CheapContrast 节点是一个非常实用的节点&#xff0c;主要用于对图像或纹理的 对比度 进行调整&#xff0c;且执行效率较高&#xff0c;适合在性能要求较高的场景中使用。 CheapContrast 节点的作用 CheapContrast 节点通过调整输入…...

健身房小程序服务渠道开展

健身不单单是锻炼身体、保持身材&#xff0c;也是一种社交方式&#xff0c;城市里门店不少&#xff0c;每家都有一定流量和老客&#xff0c;但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户&#xff0c;而消费者也对门…...

Java基础面试题08:Java中Exception和Error有什么区别?

在Java中&#xff0c;Exception 和 Error 是异常处理体系的两大核心概念。要理解它们的区别和应用&#xff0c;咱们可以逐步剖析。 Exception和Error的基础区别 共同点&#xff1a; 两者都继承自 Throwable 类&#xff0c;只有 Throwable 类型的实例才能被 throw 或 catch。 区…...

什么是axios?怎么使用axios封装Ajax?

学习目标 什么是axios怎么使用axios封装Ajax该如何使用Axios 封装 XHR 请求 什么是axios Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;它可以在浏览器和 Node.js 环境中使用。Axios 提供了简单易用的 API&#xff0c;用于执行各种 HTTP 请求操作&#xff0c;如 GET、P…...

Web前端学习_CSS盒子模型

content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…...

JAVA项目-------医院挂号系统

1&#xff0c;项目目的 1、科室管理&#xff1a;新增科室&#xff0c;删除科室&#xff08;如果有医生在&#xff0c;则不能删除该科室&#xff09;&#xff0c;修改科室。 2、医生管理&#xff1a;录入医生信息&#xff0c;以及科室信息。修改医生信息&#xff08;主要是修改…...

[工具分享] 根据Excel数据根据Word文档模板,批量创建生成Word文档并重命名,方便快速查找打印

前几天交楼的小姐姐要多份Word文档合同打印给客户&#xff0c;那么100份就需要修改100次 上面好多都是模板的制式文件&#xff0c;里面的部分数据都是要根据实际值来变动的&#xff0c; 那么有没有快速的方法来操作呢&#xff0c;还是只能一个个手动的改&#xff0c;又容易出…...

Redis的管道操作

在现代应用程序中&#xff0c;Redis作为一种高性能的内存数据库&#xff0c;被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能&#xff0c;Redis提供了管道&#xff08;Pipeline&#xff09;操作&#xff0c;允许客户端将多个命令一次性发送到服务器&…...

IT监控 | Oracle云监控全解析

Oracle云(Oracle Cloud)是Oracle公司提供的云服务平台&#xff0c;涵盖了IaaS、PaaS、SaaS和DaaS&#xff0c;支持企业在云中构建、部署、集成和扩展应用&#xff0c;为企业提供了管理服务器、应用程序、存储、网络和数据中心的全面控制能力。 跟踪Oracle云基础设施的关键组件将…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...