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

MySQL 5.7中如何实现JSON数组对象的去重追加更新?

MySQL 5.7实现JSON数组去重追加的方法

MySQL 5.7没有内置的带去重判断的JSON数组追加函数,需要通过组合现有函数实现需求,具体步骤如下:

核心思路

先通过JSON_CONTAINS判断新对象是否已存在于数组中,仅当不存在时执行追加操作。

具体实现

1. 直接使用字面量更新

UPDATE your_table
SET col = CASE
            -- 判断新对象是否存在于数组col中
            WHEN JSON_CONTAINS(col, '{"a": "a_value_1", "b": "b_value_1"}') THEN col
            -- 不存在则追加到数组末尾
            ELSE JSON_ARRAY_APPEND(col, '$', '{"a": "a_value_1", "b": "b_value_1"}')
          END
-- 替换为你的过滤条件,比如指定某条记录
WHERE id = 1;

2. 使用变量传递新对象

如果新对象的内容是动态的,推荐用JSON_OBJECT构造对象并赋值给变量,提升可读性:

-- 构造新对象
SET @new_obj = JSON_OBJECT('a', 'a_value_1', 'b', 'b_value_1');

UPDATE your_table
SET col = CASE
            WHEN JSON_CONTAINS(col, @new_obj) THEN col
            ELSE JSON_ARRAY_APPEND(col, '$', @new_obj)
          END
WHERE id = 1;

注意事项

  • JSON_CONTAINS会严格匹配对象的键值对和键的顺序,若新对象的键顺序与数组中现有对象不同(比如{"b": "b_value_1", "a": "a_value_1"}),会被判定为不同对象。如果需要忽略键顺序,需要额外将对象转换为排序后的字符串进行比较,逻辑会更复杂。
  • 确保col列的类型是JSON,否则JSON_CONTAINS等函数无法正常工作。

内容的提问来源于stack exchange,提问作者Aloof aloof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:15:32