mysql新增json_mysql5.7 新增的json字段类型用法实例分析

article/2025/10/6 0:55:30

本文实例讲述了mysql5.7 新增的json字段类型用法。分享给大家供大家参考,具体如下:

一、我们先创建一个表,准备点数据

CREATE TABLE `json_test` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',

`json` json DEFAULT NULL COMMENT 'json数据',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

222fe15d66f6cf07367f536244c1b5dc.png

二、检索json列的字段

通过使用 -> 或 ->> 运算符检索json列的字段

select id, json->'$[0].items[0].name' from json_test;

17b04f1d1c4b198679490cc93c672144.png

select id, json->>'$[0].items[0].name' from json_test;

5f54f357ba8605016f7915d60a3e11ff.png

使用 -> 和 ->> 的区别是结果用了引号包裹。

三、处理json的一些函数

JSON_PRETTY(json_val) 以优雅的格式显示json值

select id, JSON_PRETTY(json) from json_test\G;

JSON_CONTAINS(target, candidate[, path]) 判断给定的candidate是否包含在target中,如果指定了path,则在指定路径中进行查找。

注意,注意,注意,这里的candidate如果是数字,需要用单引号包裹,如果是字符串,单引号里再加上双引号包裹。

select JSON_CONTAINS(json->'$[0].name', '"1号篮子"') from json_test;

select JSON_CONTAINS(json, '"1号篮子"', '$[0].name') from json_test;

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)  判断json_doc中的路径是否存在,通俗点说就是json中的key是否存在

select JSON_CONTAINS_PATH(json, 'one', '$[0].name', '$[0].test') from json_test;

第二个参数'one'表示只要有一个key存在就返回1,否则为0

select JSON_CONTAINS_PATH(json, 'all', '$[0].name', '$[0].test') from json_test;

第二个参数'all'表示所有key存在才返回1,否则为0

JSON_SET(json_doc, path, val[, path, val] ...) 插入或更新数据并返回结果

select JSON_SET(json, '$[0].name', '2号篮子', '$[0].test', 'test') from json_test;

我们修改$[0].name的值,并添加一个key为test,值为test的项

JSON_INSERT(json_doc, path, val[, path, val] ...) 插入数据并返回结果,但不替换现有值。

select JSON_INSERT(json, '$[0].name', '2号篮子', '$[0].exts', '扩展') from json_test;

这时$[0].name不会被更新,只会新增一个字段$[0].exts

JSON_REPLACE(json_doc, path, val[, path, val] ...) 替换现有值并返回结果

select JSON_REPLACE(json, '$[0].name', '替换') from json_test;

将$[0].name中的值替换成新值

JSON_REMOVE(json_doc, path[, path] ...)  删除数据并返回结果

select JSON_REMOVE(json, '$[0].name') from json_test;

删除$[0].name这项数据

JSON_KEYS(json_doc[, path]) 获取json文档中的所有键

select JSON_KEYS(json, '$[0]') from json_test;

获取$[0]路径下的所有键

JSON_LENGTH(json_doc[, path]) 获取json文档的长度

select JSON_LENGTH(json, '$[0]') from json_test;

获取$[0]下的元素数量

JSON_EXTRACT(json_doc, path[, path] ...)  返回json文档中的数据

select JSON_EXTRACT(json, '$[0]') from json_test;

select JSON_EXTRACT(json, '$[0].name') from json_test;

返回json文档指定路径下的数据

JSON_ARRAY([val[, val] ...])  创建json数组

select JSON_ARRAY(1, '2', true, 5.6, null, now());

JSON_OBJECT([key, val[, key, val] ...]) 通过键值对, 创建json对象

select JSON_OBJECT('name', 'xiaoxu', 'age', 28, 'height', 1.72);

注意,这里键和值要成对出现

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)  合并json文档,如果有重复键,后面的数据覆盖前面的

select JSON_MERGE_PATCH('{"name":"test1"}', '{"name":"test2"}');

JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)  合并json文档,如果有重复键,则会通过数组把值都保存起来

select JSON_MERGE_PRESERVE('{"name":"test1"}', '{"name":"test2"}');

JSON_QUOTE(string)  通过用双引号字符包裹并转义内部引号和其他字符

select JSON_QUOTE('你好"世界"');

JSON_UNQUOTE(json_val)  将转义字符转换回普通字符

select JSON_UNQUOTE('你好\\t\"世界\"');

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。


http://chatgpt.dhexx.cn/article/QCEEplZC.shtml

相关文章

Mysql新增字段到大数据表导致锁表

昨天晚上7点左右,对一张表进行加字段,大概200多万条记录,字段90多个的大表,结果造成mysql锁表,进而导致服务不可用。执行语句如下: [sql] view plain copy ALTER TABLE sc_stockout_order ADD route_remar…

MySQL 新增字段(alter table add column),报错:Duplicate entry

问题 执行一个增加字段的DDL语句脚本时,报错,错误如下: Error 1062: Duplicate entry c51d3db8-59a5 2022-06-28 17:59:59 for key uniq_material_date重复执行报相同的错误。根据错误提示的条件去数据库中查询却只能查到一条记录,并没有重…

mysql新增、修改表字段

一、新增字段 说明:以下语句关键字COLUMN,都可以省略,“ACT_AAA”是表名 格式 ALTER TABLE 表名 ADD COLUMN 字段名称 字段类型(字段长短-选填) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL&#xf…

ln命令使用

Linux中ln是一个非常重要的一个命令,主要是将两个文档进行连接,创建一个连接关系 连接档:ln 使用ln可以在两个文件之间建立关联,就类似Windows下的快捷方式,连接有两种方式 Hard Link(硬式连接或实际连接…

Linux ln 命令是什么?C/C++代码实现

在Linux中,在命令行上工作时,需要在文件之间创建链接,将文件名与文件数据相关联。这可以使用名为 ln 的专用命令来实现。 什么是链接? 在讨论 ln 命令之前,让我们先讨论一下链接命令,什么是链接&#xff…

Linux命令详解(13)- ln命令

ln是英文“link files”的缩写,命令不算复杂,但是非常重要。 语法: ln option Source file or directory Destination file or directory 这里先讲下两个概念。 1.软连接 软链接类似于windows系统中的快捷方式。创建之后&#xff0c…

linux ln 远程,Linux 软连接 (ln命令)

这是linux中一个非常重要命令。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个…

linux 中的 ln 命令,Linux ln命令操作指南

ln是Linux系统中一个重要的命令,能够为文件建立链接,保持链接文件的同步性,下面小编就给大家介绍下Linux下如何使用ln命令,通过实例来详细了解。 1. 使用ln命令给档案创建symbolic link。 linux系统下的symbolic link类似于window…

Linux ln命令详解

ln命令来自于英文单词link的缩写,中文译为“链接”,其功能是用于为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic…

ln命令应用

记录:352 场景:在CentOS 7.9操作系统上,使用ln命令创建软链接(symbolic links)和硬链接(hard links)。解决:Too many levels of symbolic links。 版本: 操作系统:CentOS 7.9 1.命令应用 (1)目录创建软…

linux ln命令

ln 命令的功能是在不同的位置创建一个链接,又分软链接和硬链接,一般软链接使用较多。 硬链接:ln 源文件 链接文件 是在选定的位置生成一个文件的镜像,镜像文件与源文件同样大小 软连接:ln –s 源文件 链接文件 是…

ln命令详解

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个文件可以有多个名称,而软链接的方式则是产生一个特殊的文件&…

ubuntu18.04虚拟机崩掉导致硬盘错误,提示fsck manually

问题描述: 可能是一次性复制的文件太大了,导致内存吃紧,Windows10直接崩掉,接着就进入了我经常看到的那个蓝屏错误提示界面,有个正在恢复的百分数进度提示。 这个问题我经常碰到,或许是网页开多了吧&…

dos磁盘管理命令

dos磁盘管理命令 前言 磁盘管理命令用于日常的磁盘维护。DOS命令行提供了多种文件管理命令用于设置和管理磁盘列表。由于很多磁盘在没有安装图形界面的时候就需要对其进行操作,所以掌握DOS命令行下的磁盘管 理命令对系统管理员是十分必要的。 磁盘管理命令 以下…

centos 硬盘 修复

xfs_repair -n /dev/sdb centos 硬盘 修复 sudo parted -l sudo parted -l [localhost home]$ sudo parted -l Model: Dell VIRTUAL DISK (scsi) Disk /dev/sda: 1000GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags:Number Start End…

电脑修复损坏文件--修复命令;系统盘磁盘空间不足

目录 sfc/scannow--修复损坏的系统文件命令解析command parse步骤 命令修复磁盘;磁盘空间的释放输入“sfc /purgecache”命令(不含双引号,下同)输入“cleanmgr”命令输入“CHKDSK D:/F”,修复D驱动器号 sfc/scannow–修…

mac 磁盘修复

1、使用磁盘工具 2、终端查看并修复 diskutil listdiskutil verifyVolume disknamediskutil repairDisk diskname

如何扫描和修复 Linux 磁盘错误

在本文中,将学习如何使用 fsck 和 xfs_repair 命令修复 Linux 磁盘错误。 什么是FSCK? fsck(文件系统一致性检查)是用于检查Linux操作系统文件系统一致性的工具。 列出 Linux 磁盘分区和类型: 首先,需要…

计算机磁盘修复工具,chkdsk磁盘修复工具

chkdsk磁盘修复工具是一款非常具有专业性、权威的工具,使用chkdsk磁盘修复工具时你不可以有任何其他操作(停止运行任何程序),只能锁定磁盘(也就是强制卸下该卷),如果出现其他程序在修复时运行,就需要你重启电脑后重新修复了。硬盘坏道修复工具使用简单且安全性高,推荐使用…

ubuntu磁盘修复

输入命令ls的时候遇到错误 ls: reading directory .: Input/output error 用 dmesg 查看,发现io错误 先umount磁盘 cd /mnt umount diske 遇到 umount: /mnt/diske: target is busy. 查看谁在用 ,并kill掉,再次umount lsof /mnt/disk 然…