mysql5.7 新增的json字段类型
一、我们先创建一个表,准备点数据
CREATE TABLE `json_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`json` json DEFAULT NULL COMMENT 'json数据',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、检索json列的字段
通过使用 -> 或 ->> 运算符检索json列的字段
select id, json->'$[0].items[0].name' from json_test;

select id, json->>'$[0].items[0].name' from json_test;

使用 -> 和 ->> 的区别是结果用了引号包裹。
三、处理json的一些函数
JSON_PRETTY(json_val) 以优雅的格式显示json值
select id, JSON_PRETTY(json) from json_test\G;
JSON_CONTAINS(target, candidate[, path]) 判断给定的candidate是否包含在target中,如果指定了path,则在指定路径中进行查找。
注意,注意,注意,这里的candidate如果是数字,需要用单引号包裹,如果是字符串,单引号里再加上双引号包裹。
select JSON_CONTAINS(json->'$[0].name', '"1号篮子"') from json_test;
select JSON_CONTAINS(json, '"1号篮子"', '$[0].name') from json_test;
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) 判断json_doc中的路径是否存在,通俗点说就是json中的key是否存在
select JSON_CONTAINS_PATH(json, 'one', '$[0].name', '$[0].test') from json_test;
第二个参数'one'表示只要有一个key存在就返回1,否则为0
select JSON_CONTAINS_PATH(json, 'all', '$[0].name', '$[0].test') from json_test;
第二个参数'all'表示所有key存在才返回1,否则为0
JSON_SET(json_doc, path, val[, path, val] ...) 插入或更新数据并返回结果
select JSON_SET(json, '$[0].name', '2号篮子', '$[0].test', 'test') from json_test;
我们修改$[0].name的值,并添加一个key为test,值为test的项
JSON_INSERT(json_doc, path, val[, path, val] ...) 插入数据并返回结果,但不替换现有值。
select JSON_INSERT(json, '$[0].name', '2号篮子', '$[0].exts', '扩展') from json_test;
这时$[0].name不会被更新,只会新增一个字段$[0].exts
JSON_REPLACE(json_doc, path, val[, path, val] ...) 替换现有值并返回结果
select JSON_REPLACE(json, '$[0].name', '替换') from json_test;
将$[0].name中的值替换成新值
JSON_REMOVE(json_doc, path[, path] ...) 删除数据并返回结果
select JSON_REMOVE(json, '$[0].name') from json_test;
删除$[0].name这项数据
JSON_KEYS(json_doc[, path]) 获取json文档中的所有键
select JSON_KEYS(json, '$[0]') from json_test;
获取$[0]路径下的所有键
JSON_LENGTH(json_doc[, path]) 获取json文档的长度
select JSON_LENGTH(json, '$[0]') from json_test;
获取$[0]下的元素数量
JSON_EXTRACT(json_doc, path[, path] ...) 返回json文档中的数据
select JSON_EXTRACT(json, '$[0]') from json_test;
select JSON_EXTRACT(json, '$[0].name') from json_test;
返回json文档指定路径下的数据
JSON_ARRAY([val[, val] ...]) 创建json数组
select JSON_ARRAY(1, '2', true, 5.6, null, now());
JSON_OBJECT([key, val[, key, val] ...]) 通过键值对, 创建json对象
select JSON_OBJECT('name', 'xiaoxu', 'age', 28, 'height', 1.72);
注意,这里键和值要成对出现
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...) 合并json文档,如果有重复键,后面的数据覆盖前面的
select JSON_MERGE_PATCH('{"name":"test1"}', '{"name":"test2"}');
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...) 合并json文档,如果有重复键,则会通过数组把值都保存起来
select JSON_MERGE_PRESERVE('{"name":"test1"}', '{"name":"test2"}');
JSON_QUOTE(string) 通过用双引号字符包裹并转义内部引号和其他字符
select JSON_QUOTE('你好"世界"');
JSON_UNQUOTE(json_val) 将转义字符转换回普通字符
select JSON_UNQUOTE('你好\\t\"世界\"');
mysql5.7 新增的json字段类型的更多相关文章
- 【mysql】mysql5.7支持的json字段查询【mybatis】
mysql5.7支持的json字段查询 参考:https://www.cnblogs.com/ooo0/p/9309277.html 参考:https://www.cnblogs.com/pfdltu ...
- mysql 5.7 json 字段类型查找、修改
修改 json 里的数组字段 mysql> set @json = '{"test": [{"name": "laravel"}, { ...
- 新增时json类型报错
新增时出错:如下 实体类中字段类型没有对应上,vue页面中修改跳转页面的路径:使用params...
- Tapdata Cloud 2.1.2 来啦:大波细节已就绪!字段类型可批量修改、支持微信扫码登录、新增支持 Vika 为目标
Tapdata Cloud cloud.tapdata.net 让数据实时可用 Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Ser ...
- Hive 外部表新增字段或者修改字段类型等不生效
标题比较笼统,实际情况是: 对于Hive 的分区外部表的已有分区,在对表新增或者修改字段后,相关分区不生效. 原因是:表元数据虽然修改成功,但是分区也会对应列的元数据,这个地方不会随表的元数据修改而修 ...
- MySQL中JSON字段的使用技巧
mysql5.7.8之后开始原生支持json. 在类似mongodb这种nosql数据库中,json存储数据是非常自然的, 在mysql中合理的使用json,能够带来极大的便利 Json字段的使用场景 ...
- PG 中 JSON 字段的应用
13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...
- MySQL5.7中使用JSON(一)
因为项目需要,存储字段存储成了JSON格式,在项目中是将查询出来的值通过jackson转成相应的bean进行处理的,觉得不够简单方便. 偶然下,知道了MYSQL5.7原生支持SQL,今天一回来就折腾安 ...
- MySQL5.7中使用JSON
一.创建表 CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `info` json DEFAULT NULL, #注意desc ...
随机推荐
- win10 任务栏锁定,win键没反应
现象:之前用win10,换成win10专业版后,安装360优化系统,过了几天后突然发现任务栏好像被锁定一般,按windows键没有任何反应,任务栏打开的文件,图片等等右键也没有反应,讲道理应该有关闭选 ...
- 关于STRUCT优化的一个点
在西山居的这篇U3D cheatsheet中,提到: c12. 确保 struct 实现了 Equals() 和 GetHashCode() 这怎么理解? 首先,看下system.object.equ ...
- Linux tr命令使用方法
tr命令主要用于删除文件中控制字符或进行字符转换.本文主要介绍tr命令的基本语法和使用实例. tr基本语法 tr命令格式:tr [ -d ] [ -c ] [ -s ] [ 字符串1 ] [ 字符串2 ...
- ArcGIS案例学习笔记2_1_学校选址适宜性分析
ArcGIS案例学习笔记2_1_学校选址适宜性分析 计划时间:第二天上午 目的:学校选址,适宜性分析 内容:栅格数据分析 教程:pdf page=323 数据:chapter8/ex1/教育,生活,土 ...
- ArcGIS案例学习笔记-查找重叠的多边形
ArcGIS案例学习笔记-查找重叠的多边形 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于多边形图层,查找具有重叠(相互覆盖)的面 数据: 方法: 1. ...
- Pandas数据排序
Pandas数据排序 .sort_index() 在指定轴上根据索引进行排序,索引排序后内容会跟随排序 b = pd.DataFrame(np.arange(20).reshape(4,5),inde ...
- support:design:26.1.0
https://blog.csdn.net/qzltqdf3179103/article/details/79583491 compileSdkVersion 26buildToolsVersion ...
- java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) for method ApiService.getMethod
@FormUrlEncoded @POST("getMethod") Observable<Bean> getMethod(String field); 今天在写Ret ...
- JVM 图解--1.6,1.7,1.8
- metasploit framework(十一):获取漏洞信息
查看参数 这个模块运行需要一个session 所以需要先获取到一个session 就获得了一个session 再回到枚举补丁模块 添加session 查看参数看到session已经添加上去了 run ...