MySQL修改JSON格式数据示例

最近发现有个数据是用JSON格式直接存到表格里面的,大概就是下面这样的

然后需要修改里面某个属性的值,一开始我想的是 REPLACE 替换

sql 复制代码
UPDATE test_1 SET content = REPLACE(content, '{"age": 15, "name": "w5"}', '{"age": 20, "name": "20"}')

可以发现也能实现

但总觉得不大对劲,所以去搜了一下,发现两个以前没用过的方法 JSON_REPLACE 和 JSON_SET

我们先来试一下 JSON_REPLACE

sql 复制代码
UPDATE test_1 SET content = JSON_REPLACE(content, '$.name', "w5") WHERE id = 3

再来试下 JSON_SET

sql 复制代码
UPDATE test_1 SET content = JSON_SET(content, '$.age', 15) WHERE id = 3

发现这三个都能实现我们的目的,那这三个有什么区别

特性 REPLACE JSON_SET JSON_REPLACE
作用对象 字符串中的子字符串 JSON 数据中的键值对 JSON 数据中的已存在键值对
是否考虑 JSON 结构 不考虑,简单的字符替换 处理 JSON 数据,修改或新增键值对 处理 JSON 数据,仅替换已存在的键值对
新增键值对 不支持 支持,如果路径不存在会新增 不支持,路径不存在时不做任何操作
修改现有键值对 不适用于 JSON 键值对的修改 支持,修改路径存在的键值对 支持,只修改路径存在的键值对
适用场景 字符串替换,适合非结构化数据 修改 JSON 数据或新增键值对 只需要替换 JSON 中已存在的键值对时使用
是否破坏数据结构 可能会破坏 JSON 结构 不会破坏 JSON 结构 不会破坏 JSON 结构,确保数据一致性
相关推荐
DCTANT1 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
测试杂货铺2 小时前
Jmeter(六):json断言元件,jmeter参数化实现
jmeter·json
程序员岳焱3 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
恋猫de小郭3 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
喜欢敲代码的程序员4 小时前
SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:项目搭建(一)
spring boot·mysql·elementui·vue·mybatis
aqi004 小时前
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
android·ffmpeg·音视频·流媒体
钢铁男儿4 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#
叁沐4 小时前
MySQL 02 日志系统:一条SQL更新语句是如何执行的?
mysql
RunsenLIu4 小时前
基于Vue.js + Node.js + MySQL实现的图书销售管理系统
vue.js·mysql·node.js
码不停蹄的玄黓4 小时前
MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣
数据库·mysql·undo log·回滚日志