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

这篇具有很好参考价值的文章主要介绍了【MySQL】MySQL 8 的 JSON 新特性详解(1)JSON 数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

你好,我是小雨青年,一名使用MySQL 8 的程序员。

MySQL 8 引入了对 JSON 数据类型的全面支持,并提供了一组内置函数以有效处理 JSON 数据。MySQL 8 中的 JSON 支持的一些关键特性如下:

  1. JSON 数据类型:MySQL 8 拥有一个名为 JSON 的新数据类型,可用于在列中存储 JSON 数据。该数据类型可以以紧凑和二进制格式存储 JSON 数据,使其比将 JSON 数据存储为字符串更有效。
  2. JSON 函数:MySQL 8 提供了一组内置函数,允许您提取和操纵 JSON 数据。例如,JSON_EXTRACT 函数允许您从 JSON 文档中提取值,JSON_ARRAY 函数允许您创建 JSON 数组,JSON_OBJECT 函数允许您创建 JSON 对象。
  3. JSON 索引:MySQL 8 提供了一个选项,使用 GENERATED 列索引 JSON 数据。这允许您对 JSON 数据执行有效的搜索和排序。
  4. JSON 验证:MySQL 8 提供了一个 JSON_VALID 函数,允许您验证字符串是否为有效的 JSON 文档。
  5. JSON 聚合:MySQL 8 提供了诸如 JSON_ARRAYAGGJSON_OBJECTAGG 等函数,允许您聚合 JSON 数据并将其作为单个 JSON 文档返回。

本文将详细讲解MySQL 8 的JSON 数据类型的使用方法。

二、MySQL 8 的环境搭建

我们使用 Docker 作为本地环境,使用 Docker 具有以下优点:

  1. 简化部署:Docker 容器可以在任何支持 Docker 的系统上部署,并且不会受到底层系统的限制。
  2. 提高可移植性:Docker 容器可以在任何支持 Docker 的环境中运行,并且不需要担心应用程序的依赖关系。
  3. 提高安全性:Docker 容器在运行时独立于其他容器和操作系统,因此可以提高安全性。
  4. 提高可重复性:Docker 容器可以被保存和复制,因此可以提高开发、测试和生产环境之间的可重复性。
  5. 缩短开发周期:Docker 可以加速开发周期,因为它可以快速部署和测试应用程序。
  6. 减少资源消耗:Docker 可以节省系统资源,因为它可以共享操作系统内核,并且可以在同一系统上运行多个容器。
  7. 增强灵活性:Docker 可以根据您的需求轻松更改容器配置,以实现快速迭代和弹性。

在安装 Docker 环境之后,使用docker pull mysql:8拉取镜像到本地。

使用以下命令启动一个名为“mysql-8”的 MySQL 8 容器:

docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=password -p 3310:3306 -d mysql:8

使用以下命令连接到启动的 MySQL 8 容器:

docker exec -it mysql-8 mysql -uroot -ppassword

也可以使用图形化客户端进行连接,在本系列中,我使用的 DBeaver 社区版本,免费开源的数据库图形化客户端。我们在创建连接是注意上面一步配置的端口是3310,下图为连接成功。

mysql8 json,MySQL,json,mysql,docker

三、创建数据库、数据表并插入默认数据

MySQL 8 支持 JSON 数据格式,并且 JSON 数据格式可以在 InnoDB 和 MyISAM 引擎上使用。

InnoDB 是 MySQL 中默认的数据引擎,支持事务、外键约束和其他高级功能。

接下来我们创建数据库,并创建一个带有JSON格式的表,插入数据。

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

USE mydatabase;

CREATE TABLE mytable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  phone VARCHAR(255) NOT NULL,
  data JSON,
  UNIQUE KEY email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_General_ci;

INSERT INTO mytable (name, email, phone, data) VALUES 
("John Doe", "johndoe@example.com", "555-555-5555", '{"address": {"city": "San Francisco", "state": "CA"}}'), 
("Jane Doe", "janedoe@example.com", "555-555-5556", '{"address": {"city": "New York", "state": "NY"}}'), 
("Jim Smith", "jimsmith@example.com", "555-555-5557", '{"address": {"city": "Los Angeles", "state": "CA"}}');

创建完成。

mysql8 json,MySQL,json,mysql,docker

四、JSON格式数据的增加和查询

1. 增加一条带JOSN格式的数据

INSERT INTO mytable (name, email, phone, data) VALUES ('John Doe', 'johndoe@example.com', '555-555-5555', '{"address": "123 Main St", "city": "New York", "state": "NY"}');

注意,第四个字段 data 中存储的是一个 JSON 字符串。

2.查询JSON内数据

MySQL 8中查询json类型的数据可以使用->>运算符和->运算符。

->> 运算符可以提取json字段中的文本,而-> 运算符则可以提取json字段中的json对象。

例如,以下是使用 ->> 运算符查询json字段中的文本:

SELECT name, data->>'$.address.city' as city FROM mytable;

查询结果如下所示。

mysql8 json,MySQL,json,mysql,docker

以下是使用 -> 运算符查询json字段中的json对象:

SELECT name, data->'$.address' as city FROM mytable;

查询结果如下所示。

mysql8 json,MySQL,json,mysql,docker

3.带筛选条件的查询

在 MySQL 8 中查询带条件的 JSON 类型数据的方法如下:

使用 JSON 数据路径表达式:

SELECT name, email, phone, data->'$.address' as address, data->>'$.address.city' as city, data->>'$.address.state' 
FROM mytable 
WHERE data->'$.address.state' = 'NY';

查询结果如下所示。

mysql8 json,MySQL,json,mysql,docker

使用 JSON 函数:

SELECT name, email, phone, JSON_EXTRACT(data, '$.address') as address, JSON_EXTRACT(data, '$.address.city') as city, JSON_EXTRACT(data, '$.address.state') as state
FROM mytable 
WHERE JSON_EXTRACT(data, '$.address.state') = 'NY';

查询结果和上面的一致。

五、总结

这次我们介绍了MySQL 8 中对JSON支持的5个关键特性,并对JSON 数据类型的具体使用做了详细介绍。文章来源地址https://www.toymoban.com/news/detail-785338.html

到了这里,关于【MySQL】MySQL 8 的 JSON 新特性详解(1)JSON 数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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日
    浏览(38)
  • 解锁Mysql中的JSON数据类型,怎一个爽字了得

    在实际业务开发中,随着业务的变化,数据的复杂性和多样性不断增加。传统的关系型数据库模型在这种情况下会显得受限,因为它们需要预先定义严格的数据模式,并且通常只能存储具有相同结构的数据。而面对非结构化或半结构化数据的存储和处理需求,选择使用非关系

    2024年02月20日
    浏览(32)
  • MySQL8的特性-MySQL8知识详解

    MySQL是一个多用户、多线程的SQL数据库服务器。SQL(结构化查询语言)是世界上最流行和标准化的数据库语言。下面是MySQL的特性。 1、开源性:MySQL是一个开源的关系型数据库管理系统,可以免费使用和修改。 2、可靠性:MySQL具有高度的稳定性和可靠性,能够处理大量的并发

    2024年02月13日
    浏览(26)
  • MySQL数据库基础:JSON函数各类操作一文详解

    很多日常业务场景都会用到json文件作为数据存储起来,而mysql5.7以上就提供了存储json的支撑。往常存储json一般都保留在pg库或者是hive库里面,现在mysql有了支持的话基本业务都可以用mysql来实现。现在mysql8.x版本对json字符出处理已经做的非常完善了。现在就让我们来详细了解

    2024年02月04日
    浏览(33)
  • MYSQL中JSON类型介绍

    在mysql未支持json数据类型时,我们通常使用varchar、blob或text的数据类型存储json字符串,对mysql来说,用户插入的数据只是序列化后的一个普通的字符串,不会对JSON文档本身的语法合法性做检查,文档的合法性需要用户自己保证。在使用时需要先将整个json对象从数据库读取出

    2024年02月15日
    浏览(26)
  • Mysql中json类型查询

    MySQL提供了一些函数和操作符,用于在JSON数据类型中进行查询。下面是一些常用的MySQL JSON查询使用方法: 这里的key是JSON字段中的键名。 使用JSON_CONTAINS函数可以过滤JSON数组中包含特定值的记录。例如,假设有一个名为data的JSON字段,其中包含一个名为tags的数组,可以使用以

    2024年02月16日
    浏览(37)
  • mysql中json类型字段用法

    前言 mysql从5.7.8版本开始原生支持了JSON类型数据,同时可以对JSON类型字段中的特定的值进行查询和更新等操作,通过增加JSON类型的属性可以大大的提高我们在mysql表中存储的数据的拓展性,无需每次新增字段时都进行表结构的调整,下面我们不深入讲解底层的实现原理,我们

    2024年02月04日
    浏览(48)
  • mysql存储json类型方法和利弊

    利弊 一、json类型的特性 1、保证了JSON数据类型的强校验,JSON数据列会自动校验存入此列的内容是否符合JSON格式,非正常格式则报错,而varchar类型和text等类型本身是不存在这种机制的。 2、MySQL同时提供了一组操作JSON类型数据的内置函数。 3、更优化的存储格式,存储在JS

    2024年02月05日
    浏览(26)
  • mysql 字段类型为json,后端用list接收

    board` json DEFAULT NULL COMMENT \\\'信息,格式[{\\\"name\\\":\\\"net\\\",\\\"chip\\\":\\\"esp32\\\",\\\"hdVer\\\":1}]\\\' resultMap id=\\\"productDeviceAndBrand\\\" type=\\\"com.charg.product.domain.vo.ProductDeviceOperationsVo\\\" result property=\\\"brandId\\\" column=\\\"brand_id\\\"/ result property=\\\"brandName\\\" column=\\\"brand_name\\\"/ result property=\\\"productName\\\" column=\\\"product_name\\\"/ result property=\\\"productC

    2024年04月09日
    浏览(31)
  • Mybatis-Plus处理Mysql Json类型字段

    Mysql 5.7.8开始支持Json对象和Json数组,但在Mysql 8版本中使用Json性能更佳。 使用Json格式的好处: 无须预定义字段:字段可以无限拓展,避免了ALTER ADD COLUMN的操作,使用更加灵活。 处理稀疏字段:避免了稀疏字段的NULL值,避免冗余存储。 支持索引:相比于字符串格式的JSON,

    2024年02月03日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包