您好,欢迎来到福步贸易网!
关注我们
service@fubuwang.com
全部产品分类
JSON数据类型_mysql从5.7之后
   https://www.fubuwang.com 2023-05-07 18:09:48
核心提示:一、概述mysql从5.7后引入了json数据类型以及json函数,可以有效得访问json格式得数据。json数据类型相对于字符串,具有以下优点
一、概述

mysql从5.7后引入了json数据类型以及json函数,可以有效得访问json格式得数据。json数据类型相对于字符串,具有以下优点:

1)对于json列数据提供自动校验json格式,错误格式会提示错误;

2)优化存储类型。数据以二进制方式保存,读取效率快;

3)允许通过键值或者数据索引查找对象,无需把整个数据读取出来;

除此之外,json还有以下特点:

1)json存储空间大致于longblob或longtext差不多;

2)mysql8.0.13之后,json允许默认值为null;

3)json列不能设置索引,可通过json中得键值设置索引来提高查询效率;

4)json中null、true、false必须使用小写,

二、使用示例

SELECt VERSION(); -- 5.7以上才支持

建表

CREATE TABLE `point_data` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `device_id` char(32) COMMENT '设备id', `uid` char(32) COMMENT '设备uid', `product_id` char(32) COMMENT '产品id', `point` json DEFAULT NULL COMMENT 'json类型得字段', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `status` char(1) DEFAULT '1' COMMENT '1.有效 0.无效', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

测试数据

insert into point_data(id,device_id,uid,product_id,point) values(1783248988,'c95f1032397248d39c175b0b30161a52','ee932240a6d3de4e65c34ba8bb79d089','b634af1c1e3b4f84bc22ceb7042c8574','{"brightness":{"i":7,"n":"brightness","t":1,"v":"165","time":1647928879000},"work_mode":{"i":2,"n":"work_mode","t":1,"v":"198","time":1647928879000},"music_state":{"i":9,"n":"music_state","t":1,"v":"228","time":1647928879000},"temp_value":{"i":12,"n":"temp_value","t":4,"v":"21","time":1647928879000},"warm_switch":{"i":11,"n":"warm_switch","t":9,"v":"false","time":1647928879000}}');insert into point_data(id,device_id,uid,product_id,point) values(1783248989,'c95f1032397248d39c175b0b30161a53','ee932240a6d3de4e65c34ba8bb79d080','b634af1c1e3b4f84bc22ceb7042c8574','["brightness":{"i":7,"n":"brightness","t":1,"v":"165","time":1647928879000},"work_mode":{"i":2,"n":"work_mode","t":1,"v":"198","time":1647928879000},"music_state":{"i":9,"n":"music_state","t":1,"v":"228","time":1647928879000},"temp_value":{"i":12,"n":"temp_value","t":4,"v":"21","time":1647928879000},"warm_switch":{"i":11,"n":"warm_switch","t":9,"v":"false","time":1647928879000}]');insert into point_data(id,device_id,uid,product_id,point) values(1783248980,'c95f1032397248d39c175b0b30161a54','ee932240a6d3de4e65c34ba8bb79d081','b634af1c1e3b4f84bc22ceb7042c8574','{"brightness":{"i":7,"n":"brightness","t":1,"v":"165","time":1647928879000},"work_mode":{"i":2,"n":"work_mode","t":1,"v":"198","time":1647928879000},"music_state":{"i":9,"n":"music_state","t":1,"v":"228","time":1647928879000},"temp_value":{"i":12,"n":"temp_value","t":4,"v":"21","time":1647928879000},"warm_switch":{"i":11,"n":"warm_switch","t":9,"v":"false","time":1647928879000}}');insert into point_data(id,device_id,uid,product_id,point) values(1783248981,'c95f1032397248d39c175b0b30161a55','ee932240a6d3de4e65c34ba8bb79d082','b634af1c1e3b4f84bc22ceb7042c8574','["brightness":{"i":7,"n":"brightness","t":1,"v":"165","time":1647928879000},"work_mode":{"i":2,"n":"work_mode","t":1,"v":"198","time":1647928879000},"music_state":{"i":9,"n":"music_state","t":1,"v":"228","time":1647928879000},"temp_value":{"i":12,"n":"temp_value","t":4,"v":"21","time":1647928879000},"warm_switch":{"i":11,"n":"warm_switch","t":9,"v":"false","time":1647928879000}]');

查询json字段

SELECT POINT -> '$."work_mode"' work_modeFROM point_dataWHERe id = 1783248988;SELECt POINT -> '$."work_mode"."i"' work_modeFROM point_dataWHERe id = 1783248988;三、JSON函数

感谢分享dev.mysql感谢原创分享者/doc/refman/5.7/en/json-creation-functions.html

感谢分享特别cnblogs感谢原创分享者/ingxx/p/15880021.html

构建json得函数JSON_ARRAY([*val*[,*val*] ...])

将参数返回成一个JSON数组

SELECt JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME());+---------------------------------------------+| JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) |+---------------------------------------------+| [1, "abc", null, true, "11:30:24.000000"] |+---------------------------------------------+JSON_OBJECT([key, val[, key, val] ...])

接收键值对参数,并返回成JSON对象

SELECT JSON_OBJECT('id', 87, 'name', 'carrot');+-----------------------------------------+| JSON_OBJECT('id', 87, 'name', 'carrot') |+-----------------------------------------+| {"id": 87, "name": "carrot"} |+-----------------------------------------+JSON_QUOTE(string)

SELECT JSON_QUOTE('null'), JSON_QUOTE('"null"');+--------------------+----------------------+| JSON_QUOTE('null') | JSON_QUOTE('"null"') |+--------------------+----------------------+| "null" | ""null"" |+--------------------+----------------------+搜索JSON值得函数JSON_ConTAINS(target, candidate[, path])

判断target中指定path是否含有candidate,返回1表示包含

SET 等j = '{"a": 1, "b": 2, "c": {"d": 4}}';SET 等j2 = '1';SELECT JSON_ConTAINS(等j, 等j2, '$.a');+-------------------------------+| JSON_ConTAINS(等j, 等j2, '$.a') |+-------------------------------+| 1 |+-------------------------------+SELECT JSON_ConTAINS(等j, 等j2, '$.b');+-------------------------------+| JSON_ConTAINS(等j, 等j2, '$.b') |+-------------------------------+| 0 |+-------------------------------+SET 等j2 = '{"d": 4}';SELECT JSON_ConTAINS(等j, 等j2, '$.a');+-------------------------------+| JSON_ConTAINS(等j, 等j2, '$.a') |+-------------------------------+| 0 |+-------------------------------+SELECT JSON_ConTAINS(等j, 等j2, '$.c');+-------------------------------+| JSON_ConTAINS(等j, 等j2, '$.c') |+-------------------------------+| 1 |+-------------------------------+JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

判断JSON文档中是否包含指定path

'one': 1 if at least one path exists within the document, 0 otherwise.

'all': 1 if all paths exist within the document, 0 otherwise.

SET 等j = '{"a": 1, "b": 2, "c": {"d": 4}}';SELECT JSON_CONTAINS_PATH(等j, 'one', '$.a', '$.e');+---------------------------------------------+| JSON_CONTAINS_PATH(等j, 'one', '$.a', '$.e') |+---------------------------------------------+| 1 |+---------------------------------------------+SELECT JSON_CONTAINS_PATH(等j, 'all', '$.a', '$.e');+---------------------------------------------+| JSON_CONTAINS_PATH(等j, 'all', '$.a', '$.e') |+---------------------------------------------+| 0 |+---------------------------------------------+SELECT JSON_CONTAINS_PATH(等j, 'one', '$.c.d');+----------------------------------------+| JSON_CONTAINS_PATH(等j, 'one', '$.c.d') |+----------------------------------------+| 1 |+----------------------------------------+SELECT JSON_CONTAINS_PATH(等j, 'one', '$.a.d');+----------------------------------------+| JSON_CONTAINS_PATH(等j, 'one', '$.a.d') |+----------------------------------------+| 0 |+----------------------------------------+JSON_EXTRACT(json_doc, path[, path] ...)

根据指定path提取数据

SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]');+--------------------------------------------+| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |+--------------------------------------------+| 20 |+--------------------------------------------+SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]');+----------------------------------------------------+| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]') |+----------------------------------------------------+| [20, 10] |+----------------------------------------------------+SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');+-----------------------------------------------+| JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]') |+-----------------------------------------------+| [30, 40] |+-----------------------------------------------+JSON_UNQUOTE( JSON_EXTRACT(column, path) ) JSON_UNQUOTE(column -> path) column->>pathJSON_EXTRACT

SELECT JSON_EXTRACT (`point`, '$[0]') AS ONE,JSON_EXTRACT (`point`, '$[1]') twoFROM point_data;

 
举报收藏 0打赏 0评论 0

免责声明:
1.本站部份内容系网友自发上传与公开信息收集转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。版权归属原平台(作者)所有,版权争议与本站无关;
2.秉承互联网开放、包容的精神,福步网欢迎各方(自)媒体、机构转载、引用我们原创内容,但要严格注明来源:福步网
3.我们倡导尊重与保护知识产权,如发现本站文章存在版权问题,烦请将版权疑问、授权证明、版权证明、联系方式等,发邮件至service@fubuwang.com,我们将第一时间核实、处理,谢谢。

 
福步贸易网  |  公司简介  |  意见建议  |  法律申明  |  隐私政策  |  广告投放  |  如何免费信息发布?  |  如何开通福步贸易网VIP?  |  VIP会员能享受到什么服务?  |  怎样让客户第一时间找到您的商铺?  |  如何推荐产品到自己商铺的首页?  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备15082249号 |  m.fubuwang.com