城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

MySQLMySQL8。0进阶操作JSON

11月15日 程染筱投稿
  文章目录
  插入JSON
  检索JSON
  JSON函数
  1。优雅浏览
  2。查找
  3。修改
  3。1。JSONSET()
  3。2。JSONINSERT()
  3。3。JSONREPLACE()
  4。删除
  5。其他函数
  此学习文是基于MySQL8。0写的
  得益于大神朋友的悉心指导解决不少坑,才写出此文,向大神奉上膝盖
  要在MySQL中存储数据,就必须定义数据库和表结构(schema),这是一个主要的限制。为了应对这一点,从MySQL5。7开始,MySQL支恃了JavaScript对象表示(JavaScriptObjectNotation,JSON)数据类型。之前,这类数据不是单独的数据类型,会被存储为字符串。新的JSON数据类型提供了自动验证的JSON文档以及优化的存储格式。
  JSON文档以二进制格式存储,它提供以下功能:
  对文档元素的快速读取访问。
  当服务器再次读取JSON文档时,不需要重新解析文本获取该值。
  通过键或数组索引直接查找子对象或嵌套值,而不需要读取文档中的所有值。
  创建一个测试表
  mysqlcreatetableemployees。empdetails(
  empnointprimarykey,
  detailsjson
  );
  QueryOK,0rowsaffected(0。17sec)
  mysqldescemployees。
  FieldTypeNullKeyDefaultExtra
  empnoint(11)NOPRINULL
  detailsjsonYESNULL
  2rowsinset(0。00sec)
  检索JSON
  可以使用和运算符检索JSON列的字段:
  mysqlselectempno,details。address。pinpin
  fromemployees。
  empnopin
  1560103
  1rowinset(0。00sec)
  如果不用引号检索数据,可以使用运算符(推荐此方式)
  mysqlselectempno,details。address。pinpin
  fromemployees。
  empnopin
  1560103
  1rowinset(0。00sec)
  JSON函数
  MySQL提供了许多处理JSON数据的函数,让我们看看最常用的几种函数。
  1。优雅浏览
  想要以优雅的格式显示JSON值,请使用JSONPRETTY()函数
  mysqlselectempno,jsonpretty(details)
  fromemployees。empdetailsG
  1。row
  empno:1
  jsonpretty(details):{
  email:abcexample。com,
  phone:11800000000,
  address:{
  pin:560103,
  city:Bangalore,
  line1:abc,
  line2:xyzstreet
  },
  location:IN
  }
  1rowinset(0。00sec)
  2。查找
  可以在WHERE子句中使用colpath运算符来引用JSON的某一列
  mysqlselectempno,details
  fromemployees。empdetails
  wheredetails。address。pin560103;
  empnodetails
  1{email:abcexample。com,phone:11800000000,address:{pin:560103,city:Bangalore,line1:abc,line2:xyzstreet},location:IN}
  1rowinset(0。00sec)
  也可以使用JSONCONTAINS函数查询数据。如果找到了数据,则返回1,否则返回0
  mysqlselectjsoncontains(details。address。pin,560103)
  fromemployees。
  jsoncontains(details。address。pin,560103)
  1
  1rowinset(0。00sec)
  如何查询一个key?使用JSONCONTAINSPATH函数检查address。line1是否存在
  mysqlselectjsoncontainspath(details,one,。address。line1)
  fromemployees。
  jsoncontainspath(details,one,。address。line1)
  1
  1rowinset(0。00sec)
  one表示至少应该存在一个键,检查address。line1或者address。line2是否存在
  mysqlselectjsoncontainspath(details,one,。address。line1,。address。line2)
  fromemployees。
  jsoncontainspath(details,one,。address。line1,。address。line2)
  1
  1rowinset(0。00sec)
  如果要检查address。line1或者address。line5是否同时存在,可以使用all,而不是one
  mysqlselectjsoncontainspath(details,all,。address。line1,。address。line5)
  fromemployees。
  jsoncontainspath(details,all,。address。line1,。address。line5)
  0
  1rowinset(0。00sec)
  3。修改
  可以使用三种不同的函数来修改数据:JSONSET()、JSONINSERT()和JSONREPLACE()。在MySQL8之前的版本中,我们还需要对整个列进行完整的更新,这并不是最佳的方法。
  3。1。JSONSET()
  替换现有值并添加不存在的值
  mysqlupdateemployees。empdetails
  setdetailsjsonset(details,。address。pin,560100,。nickname,kai)
  whereempno1;
  QueryOK,1rowaffected(0。01sec)
  Rowsmatched:1Changed:1Warnings:0
  mysqlselectempno,jsonpretty(details)
  fromemployees。empdetailsG
  1。row
  empno:1
  jsonpretty(details):{
  email:abcexample。com,
  phone:11800000000,
  address:{
  pin:560100,
  city:Bangalore,
  line1:abc,
  line2:xyzstreet
  },
  location:IN,
  nickname:kai
  }
  1rowinset(0。00sec)
  3。2。JSONINSERT()
  插入值,但不替换现有值
  在这种情况下,。address。pin不会被更新,只会添加一个新的字段。address。line4
  mysqlupdateemployees。empdetails
  setdetailsjsoninsert(details,。address。pin,560132,。address。line4,AWing)
  whereempno1;
  QueryOK,1rowaffected(0。01sec)
  Rowsmatched:1Changed:1Warnings:0
  mysqlselectempno,jsonpretty(details)
  fromemployees。empdetailsG
  1。row
  empno:1
  jsonpretty(details):{
  email:abcexample。com,
  phone:11800000000,
  address:{
  pin:560100,
  city:Bangalore,
  line1:abc,
  line2:xyzstreet,
  line4:AWing
  },
  location:IN,
  nickname:kai
  }
  1rowinset(0。01sec)
  3。3。JSONREPLACE()
  仅替换现有值
  在这种情况下,。address。line5不会被添加,只有。address。pin会被更新
  mysqlupdateemployees。empdetails
  setdetailsjsonreplace(details,。address。pin,560132,。address。line5,Landmark)
  whereempno1;
  QueryOK,1rowaffected(0。00sec)
  Rowsmatched:1Changed:1Warnings:0
  mysqlselectempno,jsonpretty(details)
  fromemployees。empdetailsG
  1。row
  empno:1
  jsonpretty(details):{
  email:abcexample。com,
  phone:11800000000,
  address:{
  pin:560132,
  city:Bangalore,
  line1:abc,
  line2:xyzstreet,
  line4:AWing
  },
  location:IN,
  nickname:kai
  }
  1rowinset(0。00sec)
  4。删除
  JSONREMOVE能从JSON文档中删除数据
  mysqlupdateemployees。empdetails
  setdetailsjsonremove(details,。address。line4)
  whereempno1;
  QueryOK,1rowaffected(0。01sec)
  Rowsmatched:1Changed:1Warnings:0
  mysqlselectempno,jsonpretty(details)
  fromemployees。empdetailsG
  1。row
  empno:1
  jsonpretty(details):{
  email:abcexample。com,
  phone:11800000000,
  address:{
  pin:560132,
  city:Bangalore,
  line1:abc,
  line2:xyzstreet
  },
  location:IN,
  nickname:kai
  }
  1rowinset(0。00sec)
  5。其他函数
  JSONKEYS():获取JSON文档中的所有键
  mysqlselectjsonkeys(details),jsonkeys(details。address)
  fromemployees。empdetails
  whereempno1;
  jsonkeys(details)jsonkeys(details。address)
  〔email,phone,address,location,nickname〕〔pin,city,line1,line2〕
  1rowinset(0。00sec)
  JSONLENGTH():给出JSON文档中的元素数
  mysqlselectjsonlength(details),jsonlength(details。address)
  fromemployees。empdetails
  whereempno1;
  jsonlength(details)jsonlength(details。address)
  54
  1rowinset(0。00sec)
  原文链接:https:blog。csdn。netnangy2514articledetails98490082
投诉 评论 转载

达利奇我认为莫德里奇会陪伴国家队更长时间,他太出色了克罗地亚国家队主教练达利奇赛后接受了beINSport的采访。记者:恭喜您和国家队拿到季军,说说吧?达利奇表示:我当然要感谢我的球队,我的国家,我们在本届世界杯上的……今年火了一种穿法叫上半身过冬下半身过夏,回头率超高秋冬好像是和时尚无缘,每个人一到冬天都是大包小包包裹严实,整个人看起来臃肿厚重。秋冬天也可以穿的时髦,上半身过冬,下半身过夏天回头率不要太高!如果你还不相信,看看女明星们……荣耀赵明平板与苹果仍存较大差距,有信心逐步拿回国内份额(观察者网讯文周昊编辑吕栋)12月26日,荣耀CEO赵明在新品发布会上表示,荣耀平板目前依旧与苹果存在较大差距,但是已经在2500元以下价位段的市场中取得较高的份额,荣耀……新钢股份控股股东新钢集团51股权无偿划转事项获国务院国资委批新钢股份11月9日公告,2022年4月23日,持有公司控股股东新余钢铁集团有限公司(以下简称新钢集团)100股权的江西省国有资本运营控股集团有限公司(以下简称江西国控),与由国……舒吉贝恩为什么非要一个孩子特别懂事儿呢?每天读点书豆包子的荐书原生家庭那些事他个子长高了,但身形却萎缩了,就像是面包在烤制过程中膨胀太快而回缩,以至于不再蓬松,他只是个还不满八岁的孩子,但看起来却时常很成熟,小……新能源车换电池多少钱?比亚迪汉8万多特斯拉13万现阶段,新能源汽车相较于燃油车价格还是偏贵,这也与电池成本较高有关。对于车主来说,如果车辆出现问题,需要自费更换电池的话,那么购车和用车成本就会暴涨。前段时间,一辆极氪0……MySQLMySQL8。0进阶操作JSON文章目录插入JSON检索JSONJSON函数1。优雅浏览2。查找3。修改3。1。JSONSET()3。2。JSONINSERT(……英国男士们掀起胡子种植潮以拥有哈里王子同款络腮胡最近由于英国女王伊丽莎白二世逝世,哈里王子频繁出现在英国各媒体头条,人们越来越关注这位平时比他妻子梅根的话题还要少的王子,特别是他性感棕黄色络腮胡。最近英国掀起了一场模仿……一人单挑双探花!美媒库里得分几乎超过绿军两大得分手直播吧6月11日讯今日总决赛G4,勇士击败绿军,大比分改写为22,两队将迎来天王山。本场比赛,库里拿下了职业生涯总决赛第二高分,他全场比赛出战40分41秒,26投14中,……适合早秋的穿搭单品,好看又实用适合早秋的穿搭单品,好看又实用!初秋,针织开衫一定是上半身率很高的单品。这种单品无论是单穿还是内穿都没有问题。虽然是极其简单舒适的单品,但通过搭配不同款式的底装,这种简单低调烂……LOOP8降神介绍影片公布游戏明年3月发售游戏开发商Marvelous今日公布了青春RPG游戏《LOOP8降神》角色(CV:种崎敦美)的介绍影片,本作将于2023年3月16日发售,届时将登陆NS、PS4和XboxOne……今年楼市金九银十如何?房产大佬前不久已给出答案现在已经到了9月份了,今年楼市金九银十马上就要开启了,对于开发商来说,今年9月和10月比往年显得更加重要一些,因为自从去年下半年楼市降温之后,我们的楼市热度就一直处在低迷的状态……
CBA最新一波续签辽宁队亮出底牌,北京队2选1,广东队再1人电商走下神坛,实体店的机会在哪里?鼎桥M40上线7天顶配仅售约30台,销量惨淡!外观与华为Ma国脚炮轰国足别看男足比赛,家里没矿千万别送孩子去踢球基本确定!曝辽篮开出2条件让郭艾伦无法拒绝,3年顶薪续约稳了每天坚持踮脚尖10分钟,会收获4个意想不到的好处赵丽颖再次霸气护妹张可盈!何幸运态度反转,将万传家告上法庭荣耀X30对比荣耀X40超越特斯拉,重回全球新能源销量冠军,但比亚迪也需要新故事推荐大家一个润燥养津的食谱,搞定秋天常见的咳嗽干燥和便秘我的骑行摄影师,没选GOPro,而选影石Insta360X3莫忘世上苦人多!成名前,这些球员生活有多苦?有人靠吃低保为生
yeezy抽中要本人去拿吗抽中yeezy必须本人去吗让吴卓羲吃醋,让苏有朋挂念,代言诛仙重制版的任贤齐就是受欢迎 庆余年雪中后,张若昀再接爆款剧,他的资源为何这么好生活在繁星满天的角落人生杂感五十八题小米云山走进锦州广播电视台90后新家必选!这三款智能家电超实用高三上学期老师对学生评语牛日离婚后不让探望孩子怎么办如何鉴别电热水瓶的质量好坏怎么判断电热水瓶的质量好坏

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁