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 结构,确保数据一致性
相关推荐
莫陌尛.5 小时前
Docker MySQL 删表卡死、执行超时(MDL锁阻塞)问题复盘与根治方案
mysql·docker·容器
毕业设计7038 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
天空之城--9 小时前
Android逆向安全合规接单指南
android·安全
小小测试开发10 小时前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
消失的旧时光-194310 小时前
Android 系统层扫盲 09:AMS、ATMS、WMS、PMS 到底分别管什么?
android·wms·pms·ams·aosp·atms
泡泡鱼(敲代码中)10 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
Godikov11 小时前
Android 系统级设备应用踩坑实录:sharedUserId 签名、SDK 授权失败 -4、开机自启与 U 盘 OTA 升级
android
冰暮流星12 小时前
mysql之表子查询
数据库·mysql
hasty12 小时前
_proto__ 不是普通键:从 JSON 反序列化看原型污染
安全·json
这个DBA有点耶13 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构