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;插入数据
INSERT INTO `article` (`title`, `tags`)VALUES ("体验 Mysql JSON","["Mysql", "Database"]");这里插入的是一个 JOSN 数组
[“Mysql”, “Database”]
查询
使用 JSON 函数做两个简单的查询
1.查找带有标签”Mysql”的所有文章
SELECT * FROM `article`WHERE JSON_CONTAINS(tags, "["Mysql"]");2.查找标签中以”Data”开头的文章
SELECT * FROM `article`WHERE JSON_SEARCH(tags, "one", "Data%") IS NOT NULL;JSON_SEARCH 函数中3个参数的含义:
SELECT JSON_EXTRACT("{"id": 1, "name": "mysql"}","$.name");结果为:mysql
JSON_EXTRACT()
是JSON提取函数,$.name
就是一个 JSON path
,表示定位文档的 name 字段JSON path
是以 $ 开头,下面看几个更多的示例{"num": 123,"arr": [1, 2],"obj": {"a": 3,"b": 4}}$.num //结果:123$.arr //结果:[1, 2]$.arr[1] //结果:1$.obj.a //结果:3$**.b //结果:4使用
JSON path
的查询示例SELECTtags->"$[0]" as "tag"FROM `article`;更新数据
UPDATE `article`SET tags = JSON_MERGE(tags, "["dev"]")WHEREJSON_SEARCH(tags, "one", "dev") IS NULLANDJSON_SEARCH(tags, "one", "Mysql") IS NOT NULL;
可以看到成功添加了 “dev” 标签
再比如想把 “Mysql” 这个标签更新为 “Mysql 5.7.13″,更新语句如下:
UPDATE `article` set tags = JSON_SET(tags, ‘$[0]", ‘Mysql 5.7.13") ;上面体验了
JSON_MERGE
和 JSON_SET
,用于修改JSON的函数还有很多,例如:JSON_INSERT(doc, path, val[, path, val]…)插入数据
JSON_REPLACE(doc, path, val[, path, val]…)替换数据
JSON_ARRAY_APPEND(doc, path, val[, path, val]…)向数组尾部追加数据
JSON_REMOVE(doc, path[, path]…)从指定位置移除数据