近几年来,nosql大行其道,json更是火的一塌糊涂,作为数据库的元老,mysql在5.7版本中添加了对json数据的支持。这片博客主要介绍mysql json类型的增删改查等基本操作的用法。
首先创建一个数据库learnjson,并创建一张表json_start:

数据已经添加到数据库中了,我们试着在插入几条数据:

你会发现,虽然最后一条记录的json内容和其他两条记录的内容完全不一样甚至结构都不一样,但是依然能插入成功,因为mysql在插入时只对格式进行校验,格式通过了,就当成字符串存储,并不会考虑与其他记录是否保持一致,事实上这么做没必要。但这同时引入了一个使用时需要注意的事项,就是在定义表的时候就必须尽可能的表以及字段的功能,数据结构明确清楚,并且避免一个字段多种数据混合存储。
mysqljson数据跟新操作根据json数据的类型范围分为列表操作和对象操作两种类型,都可以直接说那个merge操作。
下面我们试着给第一条记录追加一个manager属性,很显然这是一个对象操作,执行语句如下:

再给第三条记录追加一个对象:

mysql提供一个非常灵活的本地方法:json_set(doc,path,value),其中doc为要修改的json列,path为要修改的属性的对象定位表达式,value为新值,例如:

需要注意的是,当使用json_set()方法去修改一整个对象或者数组时,mysql或将value当成字符串来解析保存,当你的value中包含”时,或自动进行转义,这样存储起来很浪费空间,同时也会产生问题,如果需要修改整个对象,建议使用Json_object(key,value,key2,value2….)来格式化你的对象,例如:

删除记录使用JSON_REMOVE(doc,path1,path2,…)方法,例如:

查询所有的属性key,使用json_keys(doc)方法:

或者:

当然,你也可以使用通配符‘*’来实现多值查询,例如:

需要注意的是,查询返回的结果始终是一个包含查询结果的数组!
创建一个表 t1,basic_info 字段为JSON类型:
比如查询 id=1 的 basic_info 中的 name 字段,可以用以下两种方式:
mysql> select basic_info->’$.name’ from t1 where id =1;
+———————————+
| basic_info->’$.name’ |
+———————————+
| “小明” |
+———————————+或者:
mysql> select JSON_EXTRACT(basic_info, ‘$.name’) from t1 where id =1;
+——————————————————+
| JSON_EXTRACT(basic_info, ‘$.name’) |
+——————————————————+
| “小明” |
+——————————————————+
1 row in set (0.04 sec)
比如查询name为小明的记录:
检索JSON数据的方法,文档:https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
修改JSON中字段的方法,文档:https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html
比如我们修改 id =1 的 basic_info 中的age为 10 岁:
可以使用JSON_REPLACE() 或者 JSON_SET() 函数:
比如往 basic_info 中插入一个性别“gender”字段:
可以使用JSON_INSERT() 或者 JSON_SET() 函数:
JSON_SET(),JSON_INSERT() 和JSON_REPLACE() 函数的区别:
还有一些其他的函数,详见对应官方文档。
到此这篇关于Mysql 5.7 新特性之 json 类型的增删改查的文章就介绍到这了,更多相关Mysql json 类型的增删改查内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
发表评论