如何在MySQL中向JSON数组添加元素?以People表liked_ids为例
在MySQL中使用JSON_ARRAY_APPEND向JSON数组添加元素的正确方法
我完全懂你现在的困惑——JSON函数的路径语法一开始确实容易懵,咱们结合你的People表场景,一步步把JSON_ARRAY_APPEND的用法说清楚。
首先先搞懂这个函数的核心逻辑:它的作用是在指定的JSON路径位置,把新元素追加到数组末尾,语法是这样的:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
json_doc:就是你要操作的JSON字段(这里就是People表的liked_ids)path:指定要修改的数组位置,最常用的$代表整个JSON根元素(也就是你的liked_ids数组本身)val:要添加的元素,数值直接写,字符串要加引号
针对你的场景的具体用法
1. 给所有行的liked_ids数组添加数值5
如果要批量更新表中所有记录的liked_ids,直接用这条SQL:
UPDATE People SET liked_ids = JSON_ARRAY_APPEND(liked_ids, '$', 5);
这里的$告诉MySQL:把5追加到liked_ids这个数组的最后面。
2. 给特定行的liked_ids数组添加数值5
如果只需要更新某一行(比如id为1的用户),加上WHERE条件就行:
UPDATE People SET liked_ids = JSON_ARRAY_APPEND(liked_ids, '$', 5) WHERE id = 1; -- 替换成你实际的筛选条件,比如username = '张三'
几个实用的注意点
- 空值处理:如果liked_ids原本是NULL,执行这条语句后会自动变成
[5],不用提前初始化数组 - 添加不同类型的元素:如果要加字符串,记得用单引号包裹,比如
JSON_ARRAY_APPEND(liked_ids, '$', 'apple') - 嵌套数组的情况:如果你的liked_ids是嵌套数组(比如
[[1,2],[3,4]]),可以用更精准的路径,比如'$[0]'表示给第一个子数组追加元素,执行后会变成[[1,2,5],[3,4]],不过你的场景用$就足够了
验证结果
执行完更新后,你可以用这条SQL确认是否成功:
SELECT liked_ids FROM People WHERE id = 1;
比如原来的liked_ids是[1,2,3],现在会返回[1,2,3,5]。
内容的提问来源于stack exchange,提问作者Ayan
相关产品推荐
相关产品推荐

