1.创建带有json字段的表
CREATE TABLE `article` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL,
`tags` json DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
2.插入数据
插入一条带有 JSON 内容的数据,执行 insert 语句:
INSERT INTO `article` (`title`, `tags`)
VALUES (
'体验 Mysql JSON',
'["Mysql", "Database"]'
);
这里插入的是一个 JOSN 数组 [“Mysql”, “Database”]
查询操作:
1.查找带有标签”Mysql”的所有文章
SELECT * FROM `article` WHERE JSON_CONTAINS(tags, '["Mysql"]');
2.查找标签中以”Data”开头的文章
SELECT
*
FROM
`article`
WHERE
JSON_SEARCH( tags, 'one', 'Data%' ) IS NOT NULL;
1.要查找的文档
2.查找的范围,有两个选项,'one' 查找第一个符合条件的,'all'查找所有符合条件的
3.查找的条件
3.JSON Path:定位文档的目标字段
SELECT JSON_EXTRACT( '{"id": 1, "name": "mysql"}', '$.name' );
JSON_EXTRACT()
是JSON提取函数,$.name
就是一个 JSON path
,表示定位文档的 name 字段
JSON path
是以 $ 开头,下面看几个更多的示例
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.num');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.arr');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.arr[0]');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.arr[1]');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.obj.a');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$.obj.b');
select JSON_EXTRACT('{ "num" : 123,"arr" : [ 1, 2 ],"obj" : { "a" : 3, "b" : 4 } }', '$**.b');
JSON Path查询
SELECT
tags->"$[0]" as 'tag',
tags->"$[1]" as 'tag2'
FROM `article`;