前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 MySQL 实现 JSON 格式的数据存储

用 MySQL 实现 JSON 格式的数据存储

原创
作者头像
贺春旸的技术博客
发布2024-08-05 14:46:01
790
发布2024-08-05 14:46:01
举报
文章被收录于专栏:DBA 平台和工具

在绝大多数业务场景中,分布式数据库并非必需。事实上,约80%的应用程序都可以在单机环境下高效运行。

对于绝大多数企业而言,数据库的数据量通常不会达到 TB 级别。

在现代应用开发中,json 已成为数据交换和存储的常见格式。尽管 MongoDB 因其天然支持 json 而备受推崇,但 MySQL 也提供了强大的 json 数据类型支持,能够高效地处理 json 数据。

在本指南中,我们将探讨如何使用MySQL 来存储和管理json数据。通过这种方式,您可以利用单一 MySQL 数据库来满足从小规模到大规模的业务需求,从而降低学习成本。

json 数据存储演示

1.创建表结构

代码语言:sql
复制
CREATE TABLE t3 (
  id bigint unsigned NOT NULL AUTO_INCREMENT ,
  jdoc json DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入 json 格式数据

代码语言:sql
复制
INSERT INTO t3(jdoc) VALUES('{"name": "张三", "age": 21}');
INSERT INTO t3(jdoc) VALUES(JSON_OBJECT('name', '李四', 'age', 22));
INSERT INTO t3(jdoc) VALUES(JSON_OBJECT('name', '中年大叔', 'age', 45, 'hobby', 
                                        JSON_ARRAY('美食', '摩旅', '游泳', '电影', '实现50岁退休')));
代码语言:javascript
复制
mysql> select * from t3;
+----+----------------------------------------------------------+
| id | jdoc                                                     |
+----+----------------------------------------------------------+
|  1 | {"age": 21, "name": "张三"}                              |
|  2 | {"age": 22, "name": "李四"}                              |
|  3 | {"age": 45, "name": "中年大叔", "address": "北京"}       |
+----+----------------------------------------------------------+
3 rows in set (0.00 sec)

3.查询 json 格式数据

(1) 获取键(Key)name和age的值(Value)

代码语言:sql
复制
mysql> select JSON_EXTRACT(jdoc,'$.age') age,JSON_EXTRACT(jdoc,'$.name
') name from t3;+------+----------------+
| age  | name           |
+------+----------------+
| 21   | "张三"         |
| 22   | "李四"         |
| 45   | "中年大叔"     |
+------+----------------+
3 rows in set (0.00 sec)

(2).获取全部键(Key)

代码语言:sql
复制
mysql> select JSON_KEYS(jdoc) from t3;
+----------------------------+
| JSON_KEYS(jdoc)            |
+----------------------------+
| ["age", "name"]            |
| ["age", "name"]            |
| ["age", "name", "address"] |
+----------------------------+
3 rows in set (0.01 sec)

(3).增加一个键-值对

代码语言:sql
复制
mysql> update t3 set jdoc=JSON_INSERT(jdoc,'$.address','北京') where JSON_EXTRACT(jdoc,'$.name'
)='中年大叔';Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t3;
+----+-----------------------------------------------------------------------------------------
-----------------------------------------+| id | jdoc                                                                                    
                                         |+----+-----------------------------------------------------------------------------------------
-----------------------------------------+|  1 | {"age": 21, "name": "张三"}                                                             
                                         ||  2 | {"age": 22, "name": "李四"}                                                             
                                         ||  3 | {"age": 45, "name": "中年大叔", "hobby": ["美食", "摩旅", "游泳", "电影", "实现50岁退休"
], "address": "北京"}                    |+----+-----------------------------------------------------------------------------------------
-----------------------------------------+3 rows in set (0.01 sec)

(4).更改一个键-值对

代码语言:sql
复制
mysql> UPDATE t3
    -> SET jdoc = JSON_SET(jdoc, '$.hobby[4]', '实现55岁退休')
    -> WHERE JSON_EXTRACT(jdoc,'$.name')='中年大叔';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t3;
+----+-----------------------------------------------------------------------------------------
-----------------------------------------+| id | jdoc                                                                                    
                                         |+----+-----------------------------------------------------------------------------------------
-----------------------------------------+|  1 | {"age": 21, "name": "张三"}                                                             
                                         ||  2 | {"age": 22, "name": "李四"}                                                             
                                         ||  3 | {"age": 45, "name": "中年大叔", "hobby": ["美食", "摩旅", "游泳", "电影", "实现55岁退休"
], "address": "北京"}                    |+----+-----------------------------------------------------------------------------------------
-----------------------------------------+3 rows in set (0.00 sec)

(5).删除一个键-值对

代码语言:sql
复制
mysql> update t3 set jdoc=JSON_REMOVE(jdoc,'$.hobby') where id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t3;
+----+----------------------------------------------------------+
| id | jdoc                                                     |
+----+----------------------------------------------------------+
|  1 | {"age": 21, "name": "张三"}                              |
|  2 | {"age": 22, "name": "李四"}                              |
|  3 | {"age": 45, "name": "中年大叔", "address": "北京"}       |
+----+----------------------------------------------------------+
3 rows in set (0.00 sec)

json 函数的完整列表

分类

函数

描述

创建JSON

json_array

创建JSON数组

json_object

创建JSON对象

json_quote

将JSON对象转换成JSON字符串类型

查询JSON

json_contains

判断是否包含某个JSON值

json_contains_path

判断某个路径下是否包JSON值

json_extract

提取JSON值

json_keys

提取JSON中的键值为JSON数组

json_search

按给定字符串关键字搜索JSON,返回匹配的路径

修改JSON

json_array_append

末尾添加数组元素,如果原有值是数值或JSON对象,则转成数组后,再添加元素

json_array_insert

插入数组元素

json_insert

插入值(插入新值,但不替换已经存在的旧值)

json_merge

合并JSON数组或对象

json_remove

删除JSON数据

json_replace

替换值(只替换已经存在的旧值)

json_set

设置值(替换旧值,并插入不存在的新值)

json_unquote

去除JSON字符串的引号,将值转换成字符串类型

返回JSON属性

json_depth

返回JSON文档的最大深度

json_length

返回JSON文档的长度

json_type

返回JSON值的类型

json_valid

判断是否为合法的JSON文档

参考

https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • json 数据存储演示
    • 1.创建表结构
      • 2.插入 json 格式数据
        • 3.查询 json 格式数据
          • (1) 获取键(Key)name和age的值(Value)
          • (2).获取全部键(Key)
          • (3).增加一个键-值对
          • (4).更改一个键-值对
          • (5).删除一个键-值对
          • 参考
      • json 函数的完整列表
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档