如何在MySQL数据库中使用JSON数据字段
因为你可以存储JSON鈥
使用JSON字段创建表
一 标签 表,该表用唯一的ID存储每个标记名,以及 一 标签图 具有多对多记录的表,将图书标识映射到标记标识
CREATE TABLE `book` (
`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(200) NOT NULL,
`tags` JSON DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB;
添加JSON数据
INSERT INTO `book` (`title`, `tags`)
VALUES (
'ECMAScript 2015: A SitePoint Anthology',
'["JavaScript", "ES2015", "JSON"]'
);
JSON_ARRAY()函数 ,创建数组。例如: -- returns [1, 2, "abc"]: SELECT JSON_ARRAY(1, 2, 'abc');
JSON_OBJECT()函数 ,创建对象。例如: -- returns {"a": 1, "b": 2}: SELECT JSON_OBJECT('a', 1, 'b', 2);
JSON_QUOTE()函数 ,它引用一个字符串作为JSON值。例如: -- returns "[1, 2, \"abc\"]": SELECT JSON_QUOTE('[1, 2, "abc"]');
或者你可以 (CAST anyValue AS JSON)
.
-- returns ARRAY:
SELECT JSON_TYPE('[1, 2, "abc"]');
-- returns OBJECT:
SELECT JSON_TYPE('{"a": 1, "b": 2}');
-- returns an error:
SELECT JSON_TYPE('{"a": 1, "b": 2');
-- returns 1:
SELECT JSON_TYPE('[1, 2, "abc"]');
-- returns 1:
SELECT JSON_TYPE('{"a": 1, "b": 2}');
-- returns 0:
SELECT JSON_TYPE('{"a": 1, "b": 2');
搜索JSON数据
-- all books with the 'JavaScript' tag:
SELECT * FROM `book` WHERE JSON_CONTAINS(tags, '["JavaScript"]');
'one'
%
LIKE
-- all books with tags starting 'Java':
SELECT * FROM `book` WHERE JSON_SEARCH(tags, 'one', 'Java%') IS NOT NULL;
JSON路径
-- returns "SitePoint":
SELECT JSON_EXTRACT('{"id": 1, "website": "SitePoint"}', '$.website');
$
名字后面跟着一个句点,如 $.website
[N]
其中N是零索引数组中的位置 这个 .[*]
通配符计算对象的所有成员 这个 [*]
通配符计算数组的所有成员 这个 prefix**suffix
通配符计算以命名前缀开头、以命名后缀结尾的所有路径
{
"a": 1,
"b": 2,
"c": [3, 4],
"d": {
"e": 5,
"f": 6
}
}
$.a
退货 one $.c
退货 [3, 4] $.c[1]
退货 four $.d.e
退货 five $**.e
退货 [5]
在查询中提取JSON路径
SELECT
title, tags->"$[0]" AS `tag1`
FROM `book`;
SELECT
name, profile->"$.twitter" AS `twitter`
FROM `user`;
SELECT
name, profile->"$.twitter" AS `twitter`
FROM `user`
WHERE
profile->"$.twitter" IS NOT NULL;
修改JSON文档的一部分
JSON_SET(doc, path, val[, path, val]...)
:插入或更新文档中的数据 JSON_INSERT(doc, path, val[, path, val]...)
:在文档中插入数据 JSON_REPLACE(doc, path, val[, path, val]...)
:替换文档中的数据 JSON_MERGE(doc, doc[, doc]...)
:合并两个或多个文档 JSON_ARRAY_APPEND(doc, path, val[, path, val]...)
:将值追加到数组末尾 JSON_ARRAY_INSERT(doc, path, val[, path, val]...)
:在文档中插入数组 JSON_REMOVE(doc, path[, path]...)
:从文档中删除数据
UPDATE `book`
SET tags = JSON_MERGE(tags, '["technical"]')
WHERE
JSON_SEARCH(tags, 'one', 'JavaScript') IS NOT NULL;