MySQL中使用JSON存储数据

这篇具有很好参考价值的文章主要介绍了MySQL中使用JSON存储数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概述:

MySQL从5.7版本开始引入了对JSON数据类型的原生支持。
这个增强功能使开发人员能够直接在数据库中存储、操作和查询JSON数据。

MySQL的JSON字段为存储半结构化数据提供了更加灵活和高效的方式。
相比传统的关系型数据库,使用JSON字段的优势包括:

  • 灵活性:JSON字段可以存储不同结构的数据,无需提前定义表结构。
  • 扩展性:可以轻松地添加新的属性或字段,无需修改表结构。
  • 快速开发:适用于那些数据结构经常变化或者需要快速迭代开发的应用。

2.使用:

要在MySQL中定义JSON字段,只需在创建表列时将数据类型指定为JSON即可。然后可以使用适当的语法将JSON数据插入到JSON字段中。以下是一个简单的示例:

CREATE TABLE my_table (
    id INT PRIMARY KEY,
    data JSON
);

INSERT INTO my_table VALUES (1, '{"name": "Tom", "age": 30}'), (2, '{"name": "Jerry", "age": 20}');

需要注意的是,在插入JSON类型的字符串时,MySQL会对JSON字符串进行格式校验,如果格式有误,就无法插入。

3.查询:

MySQL提供了强大的函数和运算符来查询JSON字段。可以使用->运算符从JSON字段中提取特定值,或使用->>运算符将值提取为字符串。以下是一个示例:

SELECT data->"$.name" AS name, data->"$.age" AS age
FROM my_table;

查询结果:

name age
“Tom” 30
“Jerry” 20

一样可以使用where语句:

SELECT data->"$.name" AS name, data->"$.age" AS age 
FROM my_table
WHERE data->"$.age" > 25;

查询结果:

name age
“Tom” 30

4.修改

  • 修改data中的age字段:
UPDATE my_table 
SET `data` = JSON_SET(`data`, "$.age", 31)
WHERE id = 1;
  • data中添加gender字段:
UPDATE my_table 
SET `data` = JSON_MERGE(`data`, '{"gender":"male"}')
WHERE id = 1;

5.删除

  • data中删除gender字段:
UPDATE my_table
SET `data` = JSON_REMOVE(`data`, "$.gender")
WHERE id = 1;

6.排序

MySQL中的JSON字段不支持直接排序。但是,我们可以使用带有->>运算符的ORDER BY子句根据特定的JSON字段对结果集进行排序。例如:

SELECT *
FROM my_table
ORDER BY data->>"$.age";

查询结果:

id data
2 {“age”: 20, “name”: “Jerry”}
1 {“age”: 30, “name”: “Tom”}

7.索引

JSON字段中,可以通过添加虚拟字段,来添加索引。

ALTER TABLE my_table 
add name VARCHAR(20) GENERATED ALWAYS AS (`data` ->> '$.name');

CREATE INDEX `name_idx` ON `my_table`(`name`);  

也可以在创建表的时候,同时生成虚拟字段和索引:

CREATE TABLE my_table (
    id INT PRIMARY KEY,
    data JSON,
    name VARCHAR(20) GENERATED ALWAYS AS (data->"$.name") VIRTUAL,
    INDEX name_idx (name)
);

8.实现原理:

在内部,MySQL使用一种优化的二进制格式(Binary JSON,简称BSON)来存储JSON数据。
这种格式可以高效地存储和检索JSON数据,提供高性能和较少的存储空间需求。文章来源地址https://www.toymoban.com/news/detail-701512.html

参考资料:
  • MySQL官方文档
  • MYSQL中json类型添加索引

到了这里,关于MySQL中使用JSON存储数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】MySQL 8 的 JSON 新特性详解(1)JSON 数据类型

    你好,我是小雨青年,一名使用MySQL 8 的程序员。 MySQL 8 引入了对 JSON 数据类型的全面支持,并提供了一组内置函数以有效处理 JSON 数据。MySQL 8 中的 JSON 支持的一些关键特性如下: JSON 数据类型:MySQL 8 拥有一个名为 JSON 的新数据类型,可用于在列中存储 JSON 数据。该数据类

    2024年02月02日
    浏览(43)
  • mysql处理json格式的字段,一文搞懂mysql解析json数据

    略。自行百度。 JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 MySQL 8.0版本中增加了对JSON类型的索引支持。可以使用CREATE INDEX语句创建JSON类型的索引,提高JSON类型数据的查询效率。 存储JSON文档所需的空间与存储

    2024年02月07日
    浏览(53)
  • MySQL的JSON 数据类型

    MySQL提供了一个专门用于存储JSON数据的数据类型:JSON。JSON数据类型允许您在MySQL数据库中存储和操作JSON格式的数据。 要在表中创建一个JSON类型的列,您可以像这样定义: 要向表中插入JSON数据,您可以编写如下的INSERT语句: 要查询JSON数据,您可以使用各种JSON函数。以下是

    2024年02月01日
    浏览(34)
  • MySQL中JSON数据类型详解

    目录 概要及优点 JSON定义 JSON字段的增删改查操作 插入操作 查询操作 修改操作 删除操作 如何对JSON字段创建索引?  加索引查询结果分析:  不加索引查询结果分析: 使用JSON时的注意事项         JSON数据类型是MySQL5.7.8开始支持的。在此之前,只能通过字符类型(CHAR、V

    2024年02月06日
    浏览(79)
  • MYSQL中解析json格式数据

    注:requestbody为指定字段 注:requestbody为指定字段,body为json中的key

    2024年02月15日
    浏览(57)
  • MySQL对JSON数据进行查询

    MySQL根据JSON字段的内容检索查询数据 使用 字段 - ‘$.json’ 属性’ 进行查询条件 以下这两种会快很多,可以自己测试 使用 json_extract 函数查询,json_extract(字段, “$.json属性”) 根据json数组查询,用 JSON_CONTAINS (字段, JSON_OBJECT(‘json属性’, “内容”)) MySQL5.7以上支持JSON的操作

    2024年02月11日
    浏览(34)
  • Mysql中json类型数据查询

            mysql在5.7版本之后就开始支持json数据类型,并且mysql8.0版本对json的处理已经做的非常完善了。json数据类型的优点缺点可自己查询,本文主要介绍一些关于json数据类型的查询操作。 下面用这个表来执行查询演示: 插入几条数据 查询json对象指定属性值的数据 1、函数

    2024年02月13日
    浏览(48)
  • Mysql json_contains使用

    在数据库中存入json字符串,使用sql查找包含什么元素 json_contains(json对象,要查的值) , 使用这个查询前提是字段类型为json类型, 注意,如果参数不是数据库中的字段的话, 一定要加引号 ,就算是整型也得加 select * from osto_account where json_contains(role_ids, \\\'6\\\'); 2. json_contains(jso

    2024年02月04日
    浏览(40)
  • 使用python脚本生成datax-json脚本(一次性操作多张表),并使用datax将业务数据从mysql采集到hdfs

    废话不多说,上代码(因为这个代码是从别的地方复制后修改的,有许多冗余的地方,但是不影响运行--从mysql将数据导入到hdfs):  接下来是通过shell脚本,使用datax将数据从mysql 采集到hdfs (下面是一个离线数仓项目的demo): 当然我们也可以使用sqoop,shell脚本如下:   业务数

    2024年02月15日
    浏览(66)
  • mysql 5.7 json 类型 json 数组类型 普通字符串类型 10w数据 查询速度差异

    建表语句ddl 10w 数据 插入 存储过程  json 类型 vs 普通字符串类型 建表语句ddl CREATE TABLE tb_json_array_test ( id INT NOT NULL AUTO_INCREMENT, user_no VARCHAR(100), user_name VARCHAR(100), score INT, create_time date, update_time date, remark VARCHAR(100), field1 VARCHAR(100), field2 VARCHAR(100), field3 VARCHAR(100), field4 VARCHAR(

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包