安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

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月比往年显得更加重要一些,因为自从去年下半年楼市降温之后,我们的楼市热度就一直处在低迷的状态……
海天味业市值一天缩水超350亿!0添加酱油谁是受益者?THEKINGOFFIGHTERSXV难忘的回忆,热血的格斗对不起,我怀孕了,你走吧!宠物们的出路到底在哪?丝绸吊带裙子最百搭了,高矮胖瘦的小姐姐皆适合2023年NBA准状元文班亚马,下一个杜兰特?状元榜样精彩对想长寿,护好肾!四招教你养出好肾脏游摩天石有感秋韵如歌大黑河郊野公园采风创作活动掠影空间的世界人间富婆钟丽缇3女儿2个爹,下嫁小12岁张伦硕,54岁拼四胎为什么有的人总是半夜惊醒,有的一觉到天亮?答案可能在肝脏17部门联合发文鼓励生育?无痛分娩的7个真相,产妇们不妨了解面经看专科生如何逆袭成为高级前端工程师!渡一教育一句话精辟人生感悟短语坚持三不上半年落实党风廉政建设工作总结问问联想控股,这是你家汉卡吗?思域迎来混动兄弟,轴距2米7油耗仅5。5L,外观内舱翻版雅阁中医治疗食管癌(噎膈)验方1则,化浊解毒,清热利湿关于旅游的日记700字樱花精选作文慢慢就长大(简介)浅谈休闲农业创意发展走向论文2021年春节后机票可能降价吗生活需要掌声作文

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利