2020-07-21 20:57:50
MySQL从5.7版本开始支持原生JSON数据类型,并提供了一系列函数用于高效操作JSON字段,涵盖创建、查询、修改、验证等核心功能。以下是具体操作指南:
一、插入/创建JSON数据JSON_OBJECT()将键值对转换为JSON对象,语法为JSON_OBJECT(key, value, ...)。示例:
INSERT INTO users (info) VALUES (JSON_OBJECT('name', '张三', 'age', 25, 'hobbies', JSON_ARRAY('reading', 'swimming')));JSON_ARRAY()将值转换为JSON数组,语法为JSON_ARRAY(val1, val2, ...)。示例:
INSERT INTO tags (data) VALUES (JSON_ARRAY('mysql', 'json', 'database'));直接插入合法JSON字符串若字符串符合JSON格式,可直接插入:
INSERT INTO products (specs) VALUES ('{"color": "red", "size": "XL"}');JSON_EXTRACT(json_col, path)根据路径提取值,返回带引号的JSON格式。示例:
SELECT JSON_EXTRACT(info, '$.name') FROM users; -- 返回: "张三"-> 操作符等价于JSON_EXTRACT,返回JSON格式。示例:
SELECT info->'$.age' AS age FROM users; -- 返回: 25->> 操作符返回去引号的纯文本值。示例:
SELECT info->>"$.name" AS name FROM users; -- 返回: 张三路径表达式规则
$:根节点。
.key:对象属性(如$.name)。
[index]:数组元素(如$.hobbies[0])。
示例:
SELECT info->>'$.hobbies[1]' FROM users; -- 返回: swimmingJSON_SET(json_doc, path, val, ...)设置值,若键存在则更新,不存在则添加。示例:
UPDATE users SET info = JSON_SET(info, '$.age', 26, '$.city', '北京');JSON_INSERT(json_doc, path, val, ...)仅当键不存在时插入值。示例:
UPDATE users SET info = JSON_INSERT(info, '$.gender', '男'); -- 仅当gender不存在时生效JSON_REPLACE(json_doc, path, val, ...)仅当键存在时替换值。示例:
UPDATE users SET info = JSON_REPLACE(info, '$.age', 30); -- 仅当age存在时生效JSON_REMOVE(json_doc, path, ...)删除指定路径的元素。示例:
UPDATE users SET info = JSON_REMOVE(info, '$.temp_flag');JSON_VALID(json_string)检查字符串是否为合法JSON,返回1(是)或0(否)。示例:
SELECT JSON_VALID('{"name": "test"}'); -- 返回: 1SELECT JSON_VALID('invalid json'); -- 返回: 0JSON_CONTAINS(json_col, target, path)判断JSON是否包含指定值(支持嵌套路径)。示例:
SELECT * FROM users WHERE JSON_CONTAINS(info, '"北京"', '$.city'); -- 查询city为北京的用户JSON_OVERLAPS(a, b)判断两个JSON数组是否有相同元素。示例:
SELECT JSON_OVERLAPS( JSON_ARRAY('mysql', 'json'), JSON_ARRAY('json', 'database')); -- 返回: 1(因'json'重复)通过掌握上述函数,可高效处理MySQL中的JSON数据,满足复杂业务场景需求。