在mysql数据库的实际开发中,JSON类型字段的使用越来越普遍,尤其是JSON数组字段常被用来存储一对多的关联数据。当需要在已有的JSON数组字段中追加新元素时,手动拼接JSON字符串不仅容易出错,还会增加代码复杂度,此时使用mysql内置的JSON_ARRAY_APPEND函数就能高效解决问题。

JSON_ARRAY_APPEND函数基本语法
JSON_ARRAY_APPEND函数的核心作用是向JSON文档的指定路径处的数组中追加一个或多个值,其基本语法格式如下:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val]...)
各参数含义说明:
- json_doc:要操作的JSON文档,可以是JSON类型的字段,也可以是合法的JSON字符串。
- path:JSON路径表达式,用于指定要操作的数组在JSON文档中的位置,路径需要以
$开头,数组元素的路径格式为$.数组名或者$.数组名[index]。 - val:要追加到数组中的值,可以是任意mysql支持的数据类型,函数会自动将其转换为对应的JSON类型。
如果函数执行成功,会返回修改后的完整JSON文档;如果参数不合法或者路径不存在,会返回NULL。
基础使用示例
首先我们创建一个测试表,包含一个JSON数组类型的字段,方便后续演示操作:
-- 创建测试表
CREATE TABLE user_tags (
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(50) NOT NULL,
tags JSON COMMENT '用户标签数组'
);
-- 插入测试数据,tags字段为JSON数组
INSERT INTO user_tags (user_name, tags) VALUES
('张三', '["运动", "阅读"]'),
('李四', '["美食", "旅游"]');
现在我们需要给张三的标签数组中追加一个新的标签摄影,可以使用如下SQL语句:
SELECT
user_name,
JSON_ARRAY_APPEND(tags, '$', '摄影') AS new_tags
FROM user_tags
WHERE user_name = '张三';
执行上述语句后,返回的结果中new_tags字段的值为["运动", "阅读", "摄影"],说明新元素已经成功追加到数组末尾。
更新表中JSON数组字段
上面的示例只是查询时返回修改后的结果,实际开发中我们通常需要直接更新表中字段的值,结合UPDATE语句即可实现:
-- 给李四的标签数组追加新标签 UPDATE user_tags SET tags = JSON_ARRAY_APPEND(tags, '$', '摄影') WHERE user_name = '李四'; -- 查询更新后的结果 SELECT user_name, tags FROM user_tags WHERE user_name = '李四';
执行后李四的tags字段会变为["美食", "旅游", "摄影"],完成字段的永久更新。
追加多个元素与嵌套路径操作
JSON_ARRAY_APPEND函数支持一次追加多个元素,也支持操作嵌套JSON中的数组,示例如下:
一次追加多个元素
-- 给张三的标签同时追加两个新标签 UPDATE user_tags SET tags = JSON_ARRAY_APPEND(tags, '$', '音乐', '$', '绘画') WHERE user_name = '张三'; SELECT tags FROM user_tags WHERE user_name = '张三';
执行后张三的tags字段会变为["运动", "阅读", "摄影", "音乐", "绘画"]。
操作嵌套JSON中的数组
如果JSON字段是嵌套结构,比如用户扩展信息中包含一个兴趣数组,结构如下:
-- 插入嵌套JSON的测试数据
INSERT INTO user_tags (user_name, tags) VALUES
('王五', '{"base": ["篮球"], "hobby": ["书法"]}');
要给hobby数组中追加新元素,需要指定正确的路径:
-- 给王五的hobby数组追加新元素 UPDATE user_tags SET tags = JSON_ARRAY_APPEND(tags, '$.hobby', '围棋') WHERE user_name = '王五'; SELECT tags FROM user_tags WHERE user_name = '王五';
执行后王五的tags字段会变为{"base": ["篮球"], "hobby": ["书法", "围棋"]},嵌套数组操作成功。
注意事项
- 如果指定的路径在JSON文档中不存在,JSON_ARRAY_APPEND函数会返回NULL,因此操作前需要确保路径合法。
- 追加的元素会自动转换为JSON类型,比如数字会转为JSON数字,字符串会转为JSON字符串,不需要手动添加引号。
- 如果原字段的值不是JSON数组,而是其他JSON类型,函数会尝试将其转换为数组后再追加元素,比如原值是字符串
"test",追加后会变为["test", "new_val"]。 - 该函数不会修改原JSON文档中其他路径的内容,只会修改指定路径处的数组。
如果需要向数组的指定位置插入元素而不是追加到末尾,可以使用JSON_ARRAY_INSERT函数,其语法和JSON_ARRAY_APPEND类似,只是需要指定插入的索引位置。
mysqlJSON_array_appendJSON数组字段数据库函数修改时间:2026-07-05 15:39:23