MySQL中JSON 格式字段里某个值修改

在 MySQL 中修改 JSON 格式字段里的某个 key 值,核心是使用 MySQL 提供的 JSON 专用函数,最常用的是 JSON_SET()(覆盖 / 新增)和 JSON_REPLACE()(仅覆盖已有值)。下面我会分场景给出具体用法,确保你能直接套用。

一、核心函数说明

先明确两个关键函数的区别:
JSON_SET(json_doc, path, val):修改已有 key 的值,若 key 不存在则新增
JSON_REPLACE(json_doc, path, val):仅修改已有 key 的值,key 不存在则无操作

path 格式规则:

根节点用 $ 表示

一级 key:$.key

嵌套 key:$.parent_key.child_key

数组元素:$.array_key[0](数组下标从 0 开始)

二、演练

假设你有一张表 user_info,结构如下:

sql 复制代码
CREATE TABLE user_info (
  id INT PRIMARY KEY AUTO_INCREMENT,
  info JSON -- 存储JSON的字段
);

-- 插入测试数据
INSERT INTO user_info (info) VALUES 
('{"name":"张三","age":20,"address":{"city":"北京","area":"朝阳"}}'),
('{"name":"李四","age":25,"hobbies":["篮球","游戏"]}');

场景 1:修改一级 JSON key 的值

修改 id=1 的用户 age 为 22

sql 复制代码
-- 方法1:用 JSON_SET(推荐,兼容性更强)
UPDATE user_info 
SET info = JSON_SET(info, '$.age', 22) 
WHERE id = 1;

-- 方法2:用 JSON_REPLACE(仅当age存在时生效)
UPDATE user_info 
SET info = JSON_REPLACE(info, '$.age', 22) 
WHERE id = 1;

场景 2:修改嵌套 JSON key 的值

修改 id=1 的用户 address.city 为 "上海":

sql 复制代码
UPDATE user_info 
SET info = JSON_SET(info, '$.address.city', '上海') 
WHERE id = 1;

场景 3:修改 JSON 数组中的元素

修改 id=2 的用户 hobbies 数组第 1 个元素(下标 0)为 "足球":

sql 复制代码
UPDATE user_info 
SET info = JSON_SET(info, '$.hobbies[0]', '足球') 
WHERE id = 2;
相关推荐
用户713335851562411 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
爱笑鱼12 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
用户713335851562412 小时前
MySQL - InnoDB 的 Buffer Pool
mysql
爱笑鱼13 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
欲速不达882013 小时前
Mysql并发DML锁等待的优化
数据库·mysql
壮哥_icon13 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
L16247614 小时前
MySQL 全环境生产快速安装 + 完整配置手册(整合国产银河麒麟适配 + 主从补充版)
数据库·mysql
用户693717500138415 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端
蝉蜕日记15 小时前
AccumuPDF高级版 v2.57 | 视图文转换PDF,合并分割压缩
android·智能手机·pdf·生活·软件需求
前端世界15 小时前
MySQL 基础入门(学习第4天)——约束与 DML 操作详解
数据库·学习·mysql