MySQL JSON类型字段操作类型字段操作
1、Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以
将一个字段设定成varchar类型,里面存放JSON格式数据,这样在需要扩展字段时,不需要修改表结构;
2、mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的优
点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据时,还是比较别扭的。
创建创建JSON
类似 varchar,设置 JSON 主要将字段的 type 是 json, 不能设置长度,可以是 NULL 但不能有默认值
CREATE TABLE muscleape
(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
category JSON,
tags JSON,
PRIMARY KEY (id)
);
DESC muscleape;
Field type Null Key Default Extra
id tinyint(3) unsigned NO PRI auto_increment
category json YES “” “”
tags json YES “” “”
插如插如JSON数据数据
1、插入 json 格式的字符串字符串,可以是对象的形式,也可以是数组的形式;
2、可以使用JSON_OBJECT、JSON_ARRAY函数生成;(其他JSON函数:https://dev.mysql.com/doc/refman/5.7/en/json-
creation-functions.html)
-- 直接插入字符串
INSERT INTO muscleape (category, tags) VALUES ('{"id": 1,"name": "muscleape"}','[1,2,3]');
-- 使用JSON函数
INSERT INTO muscleape (category, tags) VALUES (JSON_OBJECT("id",2,"name","muscleape_q"),JSON_ARRAY(1,3,5));
--
添加的数据如下:
SELECT * FROM muscleape;
id category tags
1 {“id”: 1, “name”: “muscleape”}
[1, 2,
3]
2
{“id”: 2, “name”:
“muscleape_q”}
[1, 3,
5]
查询查询JSON
1、查询JSON中的数据用 column->path的形式,其中对象类型path的表示方式 $.path,数组类型的表示方式 $[index];
SELECT id,category->'$.id',category->'$.name',tags->'$[0]',tags->'$[2]' FROM muscleape;
id category->’$.id’ category->’$.name’ tags->’$[0]’ tags->’$[2]’
1 1 “muscleape” 1 3
2 2 “muscleape_q” 1 5
2、查询结果中字符串类型还包含有双引号,可以使用JSON_UNQUOTE函数将双引号去掉,从MySQL 5.7.13开始也可以使
用操作符 ->>
SELECT id,category->'$.name',JSON_UNQUOTE(category->'$.name'),category->>'$.name',tags->'$[0]',tags->'$[2]' FROM muscleape;
id category->’$.name’ JSON_UNQUOTE(category->’$.name’) category->>’$.name’
1 “muscleape” muscleape muscleape
2 “muscleape_q” muscleape_q muscleape_q
JSON 作为条件搜索作为条件搜索
评论0
最新资源