MySQL的JSON 数据类型

news2024/11/29 10:54:31

概述:

MySQL提供了一个专门用于存储JSON数据的数据类型:JSON。JSON数据类型允许您在MySQL数据库中存储和操作JSON格式的数据。

以下是关于JSON数据类型的一些基本操作和函数:

创建表:

要在表中创建一个JSON类型的列,您可以像这样定义:

CREATE TABLE example (

    id INT AUTO_INCREMENT PRIMARY KEY,

    data JSON

);

插入数据:

要向表中插入JSON数据,您可以编写如下的INSERT语句:

INSERT INTO example (data) VALUES ('{"name": "张三", "age": 25, "address": {"city": "北京", "street": "朝阳区"}}');

查询数据:

要查询JSON数据,您可以使用各种JSON函数。以下是一些示例:

JSON_EXTRACT() 或 ->:从JSON对象中提取一个值。

JSON_EXTRACT() 例子:

SELECT JSON_EXTRACT(data, '$.name') as name FROM example;

-> 例子:

SELECT data->'$.name' as name FROM example;

JSON_UNQUOTE():此函数用于去除JSON值的双引号。

SELECT JSON_UNQUOTE(data->'$.name') as name FROM example;

->>:这是 -> 和 JSON_UNQUOTE() 的简写,用于提取JSON值并去除双引号

SELECT data->>'$.name' as name FROM example;

JSON_OBJECT():创建一个JSON对象。

SELECT JSON_OBJECT('key1', 'value1', 'key2', 'value2') AS json_object;

SELECT JSON_OBJECT('name', data->>'$.name', 'city', data->>'$.address.city') as output FROM example;

JSON_ARRAY():创建一个JSON数组。

SELECT JSON_ARRAY('value1', 'value2', 'value3') AS json_array;

JSON_LENGTH():此函数用于计算JSON数组或对象的长度。

INSERT INTO example (data) VALUES ('{"hobbies": ["basketball", "football", "reading"]}');

SELECT JSON_LENGTH(data, '$.hobbies') as output FROM example WHERE id = 2;

JSON_MERGE_PATCH():合并两个JSON文档。

SELECT JSON_MERGE_PATCH('{"key1": "value1", "key2": "value2"}', '{"key2": "new_value2", "key3": "value3"}') AS merged_json;

$ 符号:

在MySQL的JSON查询和操作函数中,$ 符号代表JSON路径表达式的根元素。它代表了整个JSON对象。使用$. 作为前缀来访问JSON对象的属性。JSON路径表达式用于定位和操作JSON数据中的特定部分。

例如,假设我们有以下JSON对象:

{

    "name": "张三",

    "age": 25,

    "address": {

        "city": "北京",

        "street": "朝阳区"

    }

}

通过使用JSON路径表达式,我们可以定位和操作这个对象的各个属性:

  • $.name:表示名字("张三")。
  • $.age:表示年龄(25)。
  • $.address:表示地址对象({"city": "北京", "street": "朝阳区"})。
  • $.address.city:表示城市("北京")。
  • $.address.street:表示街道("朝阳区")。

在MySQL中,我们可以将这些JSON路径表达式与JSON查询和操作函数一起使用,例如JSON_EXTRACT()、->、JSON_SET()等,以定位和操作JSON数据。需要注意的是,JSON_EXTRACT() 和 -> 都会返回带有双引号的字符串值,你可以使用 JSON_UNQUOTE() 函数或 ->> 运算符去除双引号。

请注意,JSON路径表达式是区分大小写的,因此$.name 和 $.Name 是不同的路径。同时,若属性名中包含特殊字符,可以用双引号将属性名括起来,如 $.address."zip-code"。

修改JSON数据:

MySQL提供了用于修改JSON数据的内置函数,例如JSON_SET()和JSON_REPLACE()。以下是一些示例:

使用JSON_SET()更新JSON对象中的某个值:

UPDATE example SET data = JSON_SET(data, '$.age', 26) WHERE id = 1;

使用JSON_REPLACE()替换JSON对象中的某个值:

UPDATE example SET data = JSON_REPLACE(data, '$.address.city', '上海') WHERE id = 1;

索引JSON数据:

虽然JSON字段不支持传统的索引,但可以使用虚拟列和生成列来创建索引。例如,为"name"键创建索引:

ALTER TABLE example ADD COLUMN name VARCHAR(255) GENERATED ALWAYS AS (data->'$.name') VIRTUAL;

CREATE INDEX idx_example_name ON example (name);

总结

这只是MySQL提供的JSON函数中的一小部分。您可以在官方文档中找到更多关于JSON函数和操作的信息:

MySQL :: MySQL 8.0 Reference Manual :: 11.5 The JSON Data Type

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++每日一练(20230429)

目录 1. 螺旋矩阵 🌟🌟 2. 戳气球 🌟🌟🌟 3. 实现五则运算 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1…

从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架

本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地。 创建 Cli 包 首先,我们在 packages 目录下新建 cli 目录,同执行pnpm init进行初始化,然后将包名改为create-easyest 这里需要知道的是当我们执行npm in…

layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

上传的哪些事 一、核心方法与基础参数选项二、使用upload组件1.调用layui.upload2.文件上传进度条3.弹出进度条4.完整核心代码5.效果预览6.后台上传代码7.附带参数data 一、核心方法与基础参数选项 upload.render({elem: #uploadlicense//指向容器选择器, url: ?mIndex&ai…

Python每日一练(20230429)

目录 1. 地下城游戏 🌟🌟🌟 2. 杨辉三角 II 🌟 3. 旋转数组 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

HCIA-RS实验-路由配置-静态路由缺省路由(2)

接上文HCIA-RS实验-路由配置-静态路由&缺省路由 继续完成缺省路由;其他原截图就不再一一截图,有需要往回看一篇。 关闭上一篇的接口shutdown(重新启动) 上一篇在R2关闭的接口2 需要重新启动,输入 undo shutdown…

React--》Redux Toolkit的使用讲解

目录 Redux Toolkit redux toolkit的基本使用 RTK代码模块化 RTK QUERY的使用 useQuery参数 Redux Toolkit Redux Toolkit是Redux的工具包,简称RTK,可以帮助我们处理使用Redux过程中的重复性工作,简化Redux中的各种操作,当然…

< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>

》基于Vue状态的过渡动画 - Transition 和 TransitionGroup &#x1f449; 一、Vue Transition 简介> Transition 和 TransitionGroup 之间的区别 &#x1f449; 二、<Transition> 组件> 触发 <Transition> 组件的场景&#xff1a;> 基于 CSS 的过渡效果&…

LeetCode:面试题 02.07. 链表相交

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 题解目录 一、&#x1f331;[面试题 02.07. 链表相交](https://leetcode.cn/problems/in…

Python可视化学习——使用JSON进行数据转换、pyecharts模块调用以及可视化案例的介绍(可视化案例数据暂无),柱状图及动态柱状图的构建

数据可视化 可视化效果一&#xff1a;2020年印美日新冠累计确诊人数 2020年是新冠疫情爆发的一年&#xff0c;随着疫情的爆发&#xff0c;国内外确诊人数成了大家关心的热点&#xff0c;相信大家都有看过类似的疫情报告.本案例对印度美国日本三个国家确诊人数的进行了可视化处…

术数基础背诵口诀整理

物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己&#xff1f;长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀&#xff1a;东方甲乙青龙木&#xff0c;南方丙丁朱雀火&#xff0c;戊己勾陈腾蛇土&…

第一章 Java基础 50 道面试题

文章目录 前言匿名内部类访问的局部变量为什么必须要用final修饰? Java基础1、jdk和jre有什么区别&#xff1f;2、final在Java中有什么作用&#xff1f;3、有常量类了为什么还要使用枚举类&#xff1f;4、为什么使用包装类&#xff1f;5、和equals的区别是什么&#xff1f;6、…

Mysql-最左前缀法则以及索引失效情况

最左前缀法则 如果索引了多列&#xff08;联合索引&#xff09;&#xff0c;要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始&#xff0c;并且不跳过索引中的列。如果跳跃某一列&#xff0c;索引将会部分失效(后面的字段索引失效)。 以 tb_user 表为例&#xff…

前端面试题(持续更新中)

【1】null和undefined的区别 同&#xff1a; 1.都是js的基本类型&#xff0c;保存在栈中&#xff0c;表示“无、没有”的意思。 2.if语句中的null和undefined都是false。 var a undefined var b null if (!a) {console.log(undefined is false); } if (!b) {console.log(null…

YOLOv7如何提高目标检测的速度和精度,基于模型结构、数据增强提高目标检测速度

目录 一、基于模型结构的方法1、多尺度训练和测试2、更细的特征图3、重新设计的损失函数 二、基于数据增强的方法1、随机缩放和裁剪2、随机旋转和翻转3、随机亮度和对比度调整4、随机噪声和模糊处理 三、实验结果与分析1、数据集和实验设置2、实验结果的分析和比较 大家好&…

【VM服务管家】VM4.0软件使用_1.1 环境配置类

目录 1.1.1 驱动配置&#xff1a;图像后台切换但前端界面不变的解决方法1.1.2 驱动缺失&#xff1a;格式化工具打开后消失的解决方法1.1.3 环境配置&#xff1a;VM试用版本激活报错的解决方法1.1.4 模块数限制&#xff1a;修改VM最大模块数量1.1.5 开机自启动&#xff1a;VM运行…

【VM服务管家】VM4.0平台SDK_2.3 控件嵌入类

目录 2.3.1 渲染结果&#xff1a;通过绑定流程或模块获取渲染结果的方法2.3.2 渲染控件&#xff1a;渲染控件加载本地图像的方法2.3.3 渲染控件&#xff1a;渲染控件上自定义图形的方法2.3.4 参数控件&#xff1a;参数配置控件绑定模块的方法2.3.5 控件颜色&#xff1a;控件颜色…

【AGC】质量服务数据分析问题

【关键字】 AGC、质量、数据分析 【问题描述】 开发者反馈在应用中集成了AGC的相关服务&#xff0c;在查看平台数据时遇到了一些问题。具体如下所述&#xff1a; 我发现平台的App卸载量每个月都非常高&#xff0c;卸载量/新下载量近80%&#xff0c;很异常&#xff0c;所以想…

【VM服务管家】VM4.x算子SDK开发_3.2 公用工具类

目录 3.2.1 图像载入&#xff1a;本地图像的载入方法3.2.2 相机取流&#xff1a;相机SDK取流的方法3.2.3 输入图像&#xff1a;给算子模块输入图像数据的方法3.2.4 实时取流&#xff1a;实时取流的实现方法3.2.5 卡尺ROI&#xff1a;卡尺型ROI的生成方法3.2.6 DL算子耗时&#…

【VM服务管家】VM4.2软件使用_5.3 环境配置类

目录 1.1.1 用户权限&#xff1a;普通用户权限使用VM的方法1.1.2 脚本环境&#xff1a;联合OpenCV开发的环境配置方法1.1.3 环境配置&#xff1a;规避流程运行时卡死的方法 1.1.1 用户权限&#xff1a;普通用户权限使用VM的方法 描述 环境&#xff1a;VM4.2 现象&#xff1a;生…

JPA实战

常见 ORM 框架 **Mybatis(ibatis)&#xff1a;**一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 …