前言
mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习nosql数据库。
JSON的定义:
中文官网
创建表
CREATE TABLE table_name (
id INT NOT NULL AUTO_INCREMENT,
json_col JSON,
PRIMARY KEY(id)
);
创建JSON
- JSON_ARRAY([val[, val] …])
- JSON_OBJECT([key, val[, key, val] …])
INSERT INTO
table_name (json_col)
VALUES
('{"City": "Galle", "Description": "Best damn city in the world"}');
上面这个SQL语句,主要注意VALUES后面的部分,由于json格式的数据里,需要有双引号来标识字符串,所以,VALUES后面的内容需要用单引号包裹。
搜索JSON
- JSON_CONTAINS(target, candidate[, path]) 判断指定JSON文档是否存在与目标文档中 – 返回 0、1
- JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] …) 判断指定文档的指定路径下是否有值,相比JSON_CONTAINS,本函数适用于判断JSON的多个路径下是否包含一个(“one”)或者全部(“all”)包含。
- JSON_EXTRACT(json_doc, path[, path] …) 提取JSON文档中指定属性的值
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SET @j2 = '1';
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a');
+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+-------------------------------+
| 1 |
+-------------------------------+
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e');
+---------------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e') |
+---------------------------------------------+
| 1 |
+---------------------------------------------+
mysql> SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]');
+--------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |
+--------------------------------------------+
| 20 |
+--------------------------------------------+
修改JSON
- JSON_ARRAY_APPEND(json_doc, path, val[, path, val] …) 在指定JSON数组指定位置的后面新增对象,返回结果
- JSON_ARRAY_INSERT(json_doc, path, val[, path, val] …) 在指定JSON数组指定位置新增对象,返回结果
- JSON_INSERT(json_doc, path, val[, path, val] …) 在指定JSON对象新增属性,返回结果
- JSON_REMOVE(json_doc, path[, path] …) 在指定JSON对象移除属性,返回结果
- JSON_REPLACE(json_doc, path, val[, path, val] …)
- JSON_SET(json_doc, path, val[, path, val] …)
mysql> SET @j = '["a", ["b", "c