You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新MySQL longtext类型字段中的JSON数据

访问并更新MySQL JSON数组中的单个键值对

没问题,我来帮你搞定MySQL里JSON数组的访问和更新!你的jsonData字段是一个包含单个对象的JSON数组,所以需要先用数组索引定位到对象,再操作里面的键值对,下面分步骤给你讲:

一、访问单个键值对

因为你的JSON是数组结构,所以要先通过$[0]定位到数组的第一个元素(MySQL中JSON数组索引从0开始),再用.键名获取对应的值。

两种常用方式:

  1. 使用箭头运算符->(返回带引号的字符串):
SELECT jsonData->'$[0].dstPort' AS dst_port FROM ApplicationEntity WHERE name = 'some_name';

执行后会返回"2345"(带双引号)。

  1. 使用->>运算符(返回不带引号的原始值,等价于JSON_UNQUOTE(JSON_EXTRACT(...))):
SELECT jsonData->>'$[0].dstPort' AS dst_port FROM ApplicationEntity WHERE name = 'some_name';

执行后会返回2345(无引号)。

如果你习惯用函数写法,也可以用JSON_EXTRACT:

SELECT JSON_EXTRACT(jsonData, '$[0].description') AS description FROM ApplicationEntity WHERE name = 'some_name';

二、更新单个键值对

要更新数组内对象的键值对,MySQL提供了JSON_SET和JSON_REPLACE两个常用函数,它们的区别是:

  • JSON_SET:如果键不存在则添加,存在则替换
  • JSON_REPLACE:只替换已存在的键,不存在则不做操作

示例1:替换已存在的键(比如把dstPort从2345改成4567)

UPDATE ApplicationEntity 
SET jsonData = JSON_SET(jsonData, '$[0].dstPort', '4567') 
WHERE name = 'some_name';

执行完可以用上面的查询语句验证是否更新成功。

示例2:添加新的键值对(比如给对象加一个priority键,值为"high")

UPDATE ApplicationEntity 
SET jsonData = JSON_SET(jsonData, '$[0].priority', 'high') 
WHERE name = 'some_name';

更新后你的JSON数据会变成:

[{"name":"some_name","description":"good_description","gla":"None","srcPort":"123","dstPort":"4567","disableTimeout":false,"priority":"high"}]

注意事项:

  • 确保你的MySQL版本是5.7及以上,因为JSON函数是从5.7版本开始支持的
  • 一定要加WHERE条件,否则会更新表中所有行的jsonData字段
  • 如果数组中有多个元素,只需要把索引[0]改成对应的位置(比如[1]操作第二个元素)

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:17