首页 > 数据库 >Mysql / MariaDB 操作 《 json 》 字段

Mysql / MariaDB 操作 《 json 》 字段

时间:2023-06-02 12:04:58浏览次数:66  
标签:JSON json value 字段 Mysql test MariaDB


Mysql / MariaDB 操作 《 json 》 字段

Mysql / MariaDB 操作 《 json 》 字段


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • Mysql / MariaDB 操作 《 json 》 字段
  • 前言
  • 环境
  • 一、数据库结构
  • 二、使用方法
  • 1.查找 json_value 字段中 a字段 等于1
  • 三、常用方法
  • 总结



前言

问题:
在使用mysql的过程中会有一些需求,需要把json(字典)或者数组json存到一个字段中,这样存取会比较方便
但是如果需要筛选则需要把这个字段里的数据查出来在程序中逐个筛选。
解决方案:
使用mysql自带函数直接筛选


环境

数据库:10.3.24-MariaDB (**<font color="red">如果是mysql需要大于5.7版本</font>**)

文档:[JSON_SEARCH - MariaDB Knowledge Base](https://mariadb.com/kb/en/json_search/)  https://mariadb.com/kb/en/json_search/

一、数据库结构

CREATE TABLE `json_test`  (
  `id` int(64) NOT NULL AUTO_INCREMENT COMMENT ' id',
  `json_value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'json',
  `json_arr_value` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '数组json',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_id`(`id`) USING BTREE
)

Mysql / MariaDB 操作 《 json 》 字段_字段

MariaDB [env]> select * from json_test;
+-----+----------------------+-----------------------------+
| id  | json_value           | json_arr_value              |
+-----+----------------------+-----------------------------+
| 134 | {"a": "1", "b": "2"} | [{"a": "te", "b": "te"}]    |
| 135 | {"a": "3", "b": "4"} | [{"a": "tes", "b": "test"}] |
+-----+----------------------+-----------------------------+

json_value 是 json格式

json_arr_value 是 arr[json]格式

二、使用方法

1.查找 json_value 字段中 a字段 等于1

JSON_VALUE 函数 (返回json中的值,可以用来模糊查找)

select * from json_test where json_value(json_value, '$.a') = '1'

JSON_CONTAINS 函数 (找到了返回1,没找到返回0)

JSON_QUOTE (对数据进行转义,字符串加双引号)

select * from json_test where JSON_CONTAINS(json_value, JSON_QUOTE('1'), '$.a')

JSON_EXTRACT 函数 (根据路径提取值)

select * from json_test where JSON_EXTRACT(json_value, '$.a') = '1'

JSON_SEARCH 函数 (搜索值返回值的索引)

select * from json_test where JSON_SEARCH(json_value, 'all', '1') is not null

三、常用方法

方法名

参数

使用方法

备注

JSON_EXISTS

(json数据,键名)

json_exists(‘{“a”: “1”}’, “$.a”)

找到返回1,没找到返回0

JSON_SEARCH

(json数据,value值)

JSON_SEARCH(json_value, ‘all’, ‘1’)

返回值所在的索引

JSON_VALUE

(json数据,键名)

json_value(json_value, ‘$.a’)

返回value值(不带引号)

JSON_CONTAINS

(json数据,value值,键名)

JSON_CONTAINS(json_value, JSON_QUOTE(‘1’), ‘$.a’)

找到了返回1,没找到返回0

JSON_EXTRACT

(json数据,键名)

JSON_EXTRACT(json_value, ‘$.a’)

根据路径提取值(带引号)

总结


标签:JSON,json,value,字段,Mysql,test,MariaDB
From: https://blog.51cto.com/u_16015778/6401426

相关文章

  • MySQL 数据库巡检,DBA应该怎么做?
    一套正常运行的系统是一个复杂的系统工程,牵涉到主机、操作系统、网络、数据库、中间件、底层存储,还有系统的核心:应用。任何层面的故障都可能造成系统的不可用。今天聊一聊数据库层面的巡检问题。数据库巡检的目的:保障数据库的正常运行,保证数据的安全性,完整性、可靠性。这篇文章......
  • python 中json数据可以以类似数组的方法访问 print(j["age"]["nian"])
    使用Python处理Json数据-猫坚果NutCat-博客园(cnblogs.com)JSON模组的常用方法load/loads:把JSON转换为Python#somejsonsomebody_info='{"name":"WenjieYe","age":75,"nationality":"China"}'#parse......
  • CentOS 下 MySQL 服务搭建
    1.卸载旧MySQL查看rpm包rpm-qa|grepmysql如果存在,使用如下命令卸载rpm-e查找是否存在mysql相关目录find/-namemysql卸载系统自带mariadb[root@localhost~]#rpm-qa|grepmariadbmariadb-libs-5.5.68-1.el7.x86_64mariadb-libs-5.5.64-1.el7.x86_64[root@localh......
  • 存储引擎的概念及作用,玩转MySQL
    前言从今天开始,就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深,全面讲解数据库体系。非常适合零基础的小伙伴来学习。全文大约【1567】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带......
  • Mysql:优化数据库结构
    冷热拆分表本同一张表的数据,有些字段用得多,有些用些用得少。在数据量大的情况下,可以将热数据单独一张,冷数据单独一张。典型的是用户基础信息表和用户详细信息表增加冗余字段学生表关联课程表,需要展示课程的简介和名称。可以考虑把这两个字段冗余到学生表里增加非空约束在业务......
  • MySQL之视图,索引,存储过程,触发器--实操
    一.视图什么是视图?视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由select结果组成的表。视图的出现其实优化了MySQL对用户权限的管理,我们在以......
  • Mysql训练营笔记
    Mysql架构与内部模块演示环境:MySQL5.7存储引擎:InnoDB一、一条查询SQL是如何执行的?  程序或者工具要操作数据库,第一步跟数据库建立连接。1、通信协议首先,MySQL必须要运行一个服务,监听默认的端口(3306)。通信协议MySQL支持多种通信协议。第一个就是TCP/IP协议,编......
  • Mysql优化
    死锁优化1.执行查询命令showprocesslist2.生成杀连接命令selectconcat('kill',id,';'),Timefrominformation_schema.processlistwhere1=1andTime>100orderbyTimedesc;3.执行这些kill即可.4.检查sql语句,优化那些同一语句里多个执行的语句或者同一事务里......
  • Mysql && Oracle 纵向拼接,多行合并为一行
    纵向合并MysqlGROUP_CONCAT函数用法:GROUP_CONCAT(合并的字段名orderby排序字段SEPARATOR分割符)方式一:只合并GROUP_CONCAT(stu.NAME)方式二:带排序GROUP_CONCAT(stu.NAMEORDERBYs.scoreDESC)方式三:带分割符GROUP_CONCAT(stu.NAMEORDERBYs.scoreDESCSEPA......
  • Java 对象转 Json
    <!--json依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.2</version></dependency>......