【MySQL】MySQL中的函数之JSON_REPLACE

news2024/11/18 3:00:49

在 MySQL 中,JSON_REPLACE() 函数用于在 JSON 文档中替换现有的值。如果指定的路径不存在,则 JSON_REPLACE() 不会修改 JSON 文档。如果需要添加新的键值对,可以使用 JSON_SET() 函数。

基本语法

JSON_REPLACE(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, "city": "New York"}'),
(2, '{"name": "Bob", "age": 25, "city": "Los Angeles"}');
示例 1: 替换单个值

假设我们要将 id 为 1 的用户的年龄从 30 改为 35:

UPDATE users
SET data = JSON_REPLACE(data, '$.age', 35)
WHERE id = 1;

查询结果:

SELECT * FROM users;

输出结果:

+----+--------------------------------------------------+
| id | data                                             |
+----+--------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"} |
| 2  | {"name": "Bob", "age": 25, "city": "Los Angeles"}|
+----+--------------------------------------------------+
示例 2: 替换多个值

假设我们要将 id 为 2 的用户的年龄从 25 改为 30,并将城市从 “Los Angeles” 改为 “San Francisco”:

UPDATE users
SET data = JSON_REPLACE(data, '$.age', 30, '$.city', 'San Francisco')
WHERE id = 2;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------+
| id | data                                                      |
+----+-----------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}          |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}       |
+----+-----------------------------------------------------------+
示例 3: 替换嵌套值

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

INSERT INTO users (id, data) VALUES
(3, '{"name": "Charlie", "age": 35, "address": {"street": "123 Main St", "city": "Chicago"}}');

我们可以替换嵌套对象 address 中的 street

UPDATE users
SET data = JSON_REPLACE(data, '$.address.street', '456 Elm St')
WHERE id = 3;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------------+
| id | data                                                            |
+----+-----------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}                |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}             |
| 3  | {"name": "Charlie", "age": 35, "address": {"street": "456 Elm St", "city": "Chicago"}} |
+----+-----------------------------------------------------------------+
示例 4: 替换数组中的值

假设 JSON 数据中包含一个数组:

INSERT INTO users (id, data) VALUES
(4, '{"name": "David", "age": 40, "hobbies": ["reading", "traveling", "cooking"]}');

我们可以替换数组 hobbies 中的第一个值:

UPDATE users
SET data = JSON_REPLACE(data, '$.hobbies[0]', 'writing')
WHERE id = 4;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------------------+
| id | data                                                                  |
+----+-----------------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}                      |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}                   |
| 3  | {"name": "Charlie", "age": 35, "address": {"street": "456 Elm St", "city": "Chicago"}} |
| 4  | {"name": "David", "age": 40, "hobbies": ["writing", "traveling", "cooking"]} |
+----+-----------------------------------------------------------------------+

注意事项

  • 如果指定的路径不存在,JSON_REPLACE() 不会修改 JSON 文档。
  • 如果需要添加新的键值对,应使用 JSON_SET() 函数。
  • JSON_REPLACE() 只能替换现有路径的值,不能创建新路径。

组合使用

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

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

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

相关文章

Unreal engine5实现类似鬼泣5维吉尔二段跳

系列文章目录 文章目录 系列文章目录前言一、实现思路二、具体使用蓝图状态机蓝图接口三、中间遇到的问题 前言 先看下使用Unreal engine5实现二段跳的效果 一、实现思路 在Unreal Engine 5 (UE5) 中使用蓝图系统实现类似于《鬼泣5》中维吉尔的二段跳效果,可以通…

RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记

《FACTS About Building Retrieval Augmented Generation-based Chatbots》是2024年7月英伟达的团队发表的基于RAG的聊天机器人构建的文章。 这篇论文在待读列表很长时间了,一直没有读,看题目以为FACTS是总结的一些事实经验,阅读过才发现FAC…

Java 简单家居开关系统

1.需求: 面向对象编程实现智能家居控制系统(简单的开关) 2.实现思路 1.定义设备类:创建设备对象代表家里的设备 JD类: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;D…

任务调度工具Spring Test

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 作用:定时自动执行某段Java代码 应用场景: 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 一.…

SAFETY LAYERS IN ALIGNED LARGE LANGUAGEMODELS: THE KEY TO LLM SECURITY

目录 概要 背景 大语言模型对齐 对齐大语言模型中的过度拒绝 微调攻击 研究设置 问题定义 对齐的大语言模型 大语言模型的提示模板 安全层的存在和定位 安全层的存在性 1.从余弦相似度说明 2.从向量之间角度差异说明 3.与预训练LLM对比说明 安全层的定位 1.推理…

netcore Kafka

一、新建项目KafakDemo <ItemGroup><PackageReference Include"Confluent.Kafka" Version"2.6.0" /></ItemGroup> 二、Program.cs using Confluent.Kafka; using System; using System.Threading; using System.Threading.Tasks;names…

在k8s上部署Crunchy Postgres for Kubernetes

目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数八、数据导入九、权限管理 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的…

函数指针示例

目录&#xff1a; 代码&#xff1a; main.c #include <stdio.h> #include <stdlib.h>int Max(int x, int y); int Min(int x, int y);int main(int argc, char**argv) {int x,y;scanf("%d",&x);scanf("%d",&y);int select;printf(&q…

计算机网络:运输层 —— 运输层端口号

文章目录 运输层端口号的分类端口号与应用程序的关联应用举例发送方的复用和接收方的分用 运输层端口号的分类 端口号只具有本地意义&#xff0c;即端口号只是为了标识本计算机网络协议栈应用层中的各应用进程。在因特网中不同计算机中的相同端口号是没有关系的&#xff0c;即…

牛客挑战赛77

#include <iostream>// 函数 kXOR&#xff1a;计算两个数在 k 进制下的异或和 // 参数&#xff1a; // a: 第一个正整数 // b: 第二个正整数 // k: 进制基数 // 返回值&#xff1a; // 两数在 k 进制下的异或和&#xff08;十进制表示&#xff09; long long kXO…

大数据-225 离线数仓 - 目前需求分析 指标口径 日志数据采集 taildir source HDFS Sink Agent Flume 优化配置

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【流量分析】常见webshell流量分析

免责声明&#xff1a;本文仅作分享&#xff01; 对于常见的webshell工具&#xff0c;就要知攻善防&#xff1b;后门脚本的执行导致webshell的连接&#xff0c;对于默认的脚本要了解&#xff0c;才能更清晰&#xff0c;更方便应对。 &#xff08;这里仅针对部分后门代码进行流量…

springboot基于Web足球青训俱乐部管理后台系统开发(代码+数据库+LW)

摘 要 随着社会经济的快速发展&#xff0c;人们对足球俱乐部的需求日益增加&#xff0c;加快了足球健身俱乐部的发展&#xff0c;足球俱乐部管理工作日益繁忙&#xff0c;传统的管理方式已经无法满足足球俱乐部管理需求&#xff0c;因此&#xff0c;为了提高足球俱乐部管理效率…

电子应用设计方案-12:智能窗帘系统方案设计

一、系统概述 本设计方案旨在打造便捷、高效的全自动智能窗帘系统。 二、硬件选择 1. 电机&#xff1a;选用低噪音、扭矩合适的智能电机&#xff0c;根据窗帘尺寸和重量确定电机功率&#xff0c;确保能平稳拉动窗帘。 2. 轨道&#xff1a;选择坚固、顺滑的铝合金轨道&…

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…

mysql时间时区修改、set global、配置文件-default-time-zone

通过查看mysql错误日志或二进制日志可以看到时间和时区并不与国内的东八区时间一致。 查询mysql系统时区时间 show variables where variable_name"system_time_zone"; CST指的是中国标准时间&#xff0c;也是中国的标准时区。 set命令修改时区时间 global&#xf…

零基础利用实战项目学会Pytorch

目录 pytorch简介 1.线性回归 2.数据类型 2.1数据类型检验 2.2Dimension0/Rank0 2.3 Dim1/Rank1 2.4 Dim2/Rank2 3.一些方法 4.Pytorch完成分类任务 4.1模型参数 4.2 前向传播 4.3训练以及验证 4.4 三行搞定&#xff01; 4.5 准确率 5、Pytorch完成回归任务 5.…

信捷PLC转以太网连接电脑方法

信捷XC/XD/XL等系列PLC如何上下载程序?可以选择用捷米特JM-ETH-XJ模块轻松搞定,并不需要编程&#xff0c;即插即用&#xff0c;具体看见以下介绍&#xff1a; 产品介绍 捷米特JM-ETH-XJ是专门为信捷PLC转以太网通讯面设计&#xff0c;可实现工厂设备信息化需求&#xff0c;对…

【Flink】-- flink新版本发布:v2.0-preview1

目录 1、简介 2、非兼容变更 2.1、API 2.2、连接器适配计划 2.3、配置 2.4、其它 3、重要新特性 3.1、存算分离状态管理 3.2、物化表 3.3、批作业的自适应执行 3.4、流式湖仓 4、附加 4.1、非兼容性的 api 程序变更 4.1.2、Removed Classes # 4.1.3、Modified Cl…

头歌-本关任务:使用GmSSL命令行,生成SM2私钥并对文件进行签名验证(第二关)。

第一关在网上找到了&#xff0c;但第二关没找到&#xff0c;在这里做一下补充:) 如果想认真学的话可以看看文档 国密SM2椭圆曲线密码标准http://gmssl.org/docs/sm2.html 内容为 GuetPython 的明文文件msg.txt 私钥sm2.pem 公钥sm2Pub.pem 使用sm2utl对msg.txt进行签名&…