MySQL 8 存储JSON

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 要在MySQL中存储数据,必须定义数据库和表结构,但有时做配置后台开关项太多不可能定义几百个字段,用json方法放到一个一个字段里也是必要的。

要在MySQL中存储数据,必须定义数据库和表结构,但有时做配置后台开关项太多不可能定义几百个字段,用json方法放到一个一个字段里也是必要的。


为了应对这一点,从MySQL 5.7开始,MySQL支恃了 JavaScript对象表示(JavaScriptObject Notation,JSON) 数据类型。


之前,json数据不被支持,只是被存储为字符串。


mysql8JSON数据类型提供了自动验证的JSON文档以及优化的存储格式。


可以通过键或数组索引直接查找子对象或嵌套值,而不需要读取文档中的所有值。


实例测试


创建表


2.jpg


插入JSON

insert into employees.emp_details (emp_no, details)
values (‘1’,
‘{“location”:“IN”,“phone”:"+11800000000",“email”:“abc@example.com”,“address”:{“line1”:“abc”,“line2”:“xyz street”,“city”:“Bangalore”,“pin”:“560103”}}’
);


3.jpg


检索JSON


可以使用->和->>运算符检索JSON列的字段:


select emp_no, details -> ‘$.address.pin’ pin from employees.emp_details;


4.jpg


如果返回值不要引号,用->> 运算符(推荐此方式)


select emp_no, details ->> ‘$.address.pin’ pin from employees.emp_details;


5.jpg


常用的JSON数据函数


1. 优雅浏览

JSON_PRETTY()优雅的格式显示JSON值


select emp_no, json_pretty(details)


from employees.emp_detailsG


************** 1. row ****************


emp_no: 1
json_pretty(details): {
“email”: “abc@example.com”,
“phone”: “+11800000000”,
“address”: {
“pin”: “560103”,
“city”: “Bangalore”,
“line1”: “abc”,
“line2”: “xyz street”
},
“location”: “IN”
}


2. 查找


可以在WHERE子句中使用col ->> path运算符来引用JSON的某一列


select emp_no, details


from employees.emp_details


where details ->> ‘$.address.pin’ = “560103”;


6.jpg


也可以用JSON_CONTAINS函数查询数据。


如果找到了数据,则返回1,否则返回0


select json_contains(details ->> ‘$.address.pin’,“560103”)


from employees.emp_details;


返回值:1


如何查询一个key?使用JSON_CONTAINS_PATH函数检查address. line1是否存在


select json_contains_path(details, ‘one’, “$.address.line1”)


from employees.emp_details;


返回值:1


one表示至少应该存在一个键,检查address.line1或者address.line2是否存在


select json_contains_path(details, ‘one’, “. a d d r e s s . l i n e 1 " , " .address.line1", ".address.line1",".address.line2”)


from employees.emp_details;


返回值:1


如果要检查address.line1或者address.line5是否同时存在,可以使用all,而不是one


select json_contains_path(details, ‘all’, “. a d d r e s s . l i n e 1 " , " .address.line1", ".address.line1",".address.line5”)


from employees.emp_details;


返回值:0


有三种函数来修改数据:


在MySQL 8之前的版本中,需要对整个列进行完整的更新,再写回去。


3.1. JSON_SET()


替换现有值并添加不存在的值


update employees.emp_details
set details = json_set(details, “. a d d r e s s . p i n " , " 560100 " , " .address.pin", "560100", ".address.pin","560100",".nickname”,“kai”)
where emp_no = 1;
Rows matched: 1 Changed: 1 Warnings: 0
select emp_no, json_pretty(details)
from employees.emp_detailsG
************ 1. row ****************
emp_no: 1
json_pretty(details): {
“email”: “abc@example.com”,
“phone”: “+11800000000”,
“address”: {
“pin”: “560100”,
“city”: “Bangalore”,
“line1”: “abc”,
“line2”: “xyz street”
},
“location”: “IN”,
“nickname”: “kai”
}
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
Linux 安装 mysql 及配置存储位置
Linux 安装 mysql 及配置存储位置
103 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
92 0
|
2月前
|
存储 关系型数据库 MySQL
mysql 使用变量存储中间结果的写法
mysql 使用变量存储中间结果的写法
|
5天前
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
14 1
|
2月前
|
存储 JSON 关系型数据库
MySQL与JSON的邂逅:开启大数据分析新纪元
MySQL与JSON的邂逅:开启大数据分析新纪元
|
3月前
|
关系型数据库 MySQL 存储
|
2月前
|
存储 小程序 关系型数据库
原生小程序 获取手机号并进行存储到mysql数据库
原生小程序 获取手机号并进行存储到mysql数据库
|
4月前
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型
MySQL设计规约问题之存储状态、性别等信息时,应该使用哪种数据类型

热门文章

最新文章

下一篇
无影云桌面