在 MySQL 里,JSON_CONTAINS 方法是可以用于多维 JSON 数据的,不过使用时要依据具体的场景与需求,采用不同的处理方式。下面为你详细介绍相关内容。
基本语法#
JSON_CONTAINS(target, candidate[, path])
target
:需要被检查的 JSON 文档。candidate
:要查找的 JSON 值。path
:可选参数,指定在 target 中进行查找的路径。
示例说明#
1、单维 JSON 数组#
1
2
3
4
5
6
7
8
9
10
11
| -- 创建示例表
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
json_data JSON
);
-- 插入示例数据
INSERT INTO test_table (json_data) VALUES ('["apple", "banana", "cherry"]');
-- 查询包含 "banana" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"banana"');
|
在这个例子中,json_data
是单维 JSON 数组,JSON_CONTAINS
直接查找其中是否包含 "banana"
。
2、多维 JSON 数组#
1
2
3
4
5
| -- 插入多维 JSON 数组数据
INSERT INTO test_table (json_data) VALUES ('[["apple", "banana"], ["cherry", "date"]]');
-- 查询包含 "cherry" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"cherry"');
|
这里的 json_data
是多维 JSON 数组,JSON_CONTAINS
会递归查找整个 JSON 结构,判断是否包含 "cherry"
。
3、JSON 对象嵌套数组#
1
2
3
4
5
| -- 插入 JSON 对象嵌套数组的数据
INSERT INTO test_table (json_data) VALUES ('{"fruits": ["apple", "banana"], "vegetables": ["carrot", "tomato"]}');
-- 查询包含 "carrot" 的记录
SELECT * FROM test_table WHERE JSON_CONTAINS(json_data, '"carrot"', '$.vegetables');
|
在这个例子中,json_data
是 JSON 对象嵌套数组,使用 path
参数 $.vegetables
来指定在 vegetables
数组中查找 "carrot"
。
注意事项#
JSON_CONTAINS
查找的是完整的 JSON 值,若要进行模糊匹配,此方法并不适用。- 对于大型的多维 JSON 数据,频繁使用
JSON_CONTAINS
可能会影响查询性能,你可以考虑对 JSON 数据进行预处理,或者使用其他更高效的索引策略。