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 结构,确保数据一致性
相关推荐
星恒随风2 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
传奇开心果编程4 小时前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
爱码少年4 小时前
Springboot下如何将CSV文件数据导入H2、Mysql数据库表
数据库·mysql·csv
2603_969694855 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
慕容雪_7 小时前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m11 小时前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui11 小时前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
ClouGence14 小时前
最基础的异构数据库 DDL 同步,我们踩过哪些坑?
数据库·mysql·postgresql
小呆爱发呆15 小时前
第三章 MySQL 库表操作
数据库·mysql·adb
普通人616 小时前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql