MySQL JSON 使用
关于一些 MySQL JSON 操作的笔记
MySQL JSON 基本使用
在MySQL中,你可以使用JSON相关的函数来过滤和操作JSON字段。以下是几个常见的JSON过滤和操作函数:
JSON_EXTRACT()
这个函数用于从JSON文档中提取值。它接受一个JSON值和一个或多个路径参数
SELECT JSON_EXTRACT(json_column, '$.key') FROM table_name;
如果你的JSON结构更复杂,你可能需要提供更具体的路径
SELECT JSON_EXTRACT(json_column, '$.object.inner_key') FROM table_name;
JSON_VALUE()
这个函数与JSON_EXTRACT()类似,但它会将结果转换为标量类型(如字符串、数字)
SELECT JSON_VALUE(json_column, '$.number') FROM table_name;
JSON_UNQUOTE()
用于去除JSON字符串中的引号
SELECT JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.string')) FROM table_name;
JSON_SEARCH()
在JSON文档中搜索指定的值,并返回包含该值的键
SELECT JSON_SEARCH(json_column, 'one', 'search_value') FROM table_name;
JSON_CONTAINS()
检查一个JSON值是否包含另一个JSON值或字符串
SELECT JSON_CONTAINS(json_column, '"search_value"', '$[*]') FROM table_name;
JSON_ARRAYAGG()
将多行中的JSON值聚合到一个JSON数组中
SELECT JSON_ARRAYAGG(json_column) FROM table_name;
JSON_OBJECTAGG()
将两列聚合为一个JSON对象
SELECT JSON_OBJECTAGG(key_column, value_column) FROM table_name;
JSON_INSERT()
在现有JSON文档中插入新的键值对
UPDATE table_name SET json_column = JSON_INSERT(json_column, '$.new_key', 'new_value');
JSON_SET()
设置或更新JSON文档中的一个或多个键的值
UPDATE table_name SET json_column = JSON_SET(json_column, '$.key', 'new_value');
JSON_REMOVE()
从JSON文档中移除一个或多个键
UPDATE table_name SET json_column = JSON_REMOVE(json_column, '$.key');
JSON_REPLACE()
替换JSON文档中一个或多个键的值
UPDATE table_name SET json_column = JSON_REPLACE(json_column, '$.key', 'new_value');
JSON_MERGE()
合并两个或更多JSON文档
SELECT JSON_MERGE(json_column1, json_column2) FROM table_name;
MySQL JSON where 过滤
在MySQL中,你可以使用 JSON_CONTAINS() 或者 JSON_EXTRACT() 函数配合 WHERE 子句来基于JSON字段的内容进行查询。以下是一些示例:
使用 JSON_CONTAINS()
如果你想要检查一个JSON数组中是否包含某个值,可以使用 JSON_CONTAINS() 函数。例如,假设你有一个名为 products 的表,其中有一个名为 features 的JSON字段,该字段存储了一个JSON数组,如下所示:
{
"features": ["wireless", "bluetooth", "touchscreen"]
}
要查找所有包含 "bluetooth" 特性的产品,你可以这样写查询:
SELECT * FROM products WHERE JSON_CONTAINS(features, '"bluetooth"', '$[*]');
这里的 $[*] 表示在数组的任何位置查找。
使用 JSON_EXTRACT() 和 WHERE
如果你想根据JSON对象内的键值对进行过滤,可以使用 JSON_EXTRACT() 函数配合 WHERE 子句。例如,假设你有一个 users 表,其中有一个名为 details 的JSON字段,该字段存储了用户的一些信息,如下所示:
{
"details": {
"age": 30,
"city": "New York"
}
}
要查找所有年龄大于25岁的用户,你可以这样写查询:
SELECT * FROM users WHERE JSON_EXTRACT(details, '$.age') > 25;