• Mysql / MariaDB 操作 《 json 》 字段


    Mysql / MariaDB 操作 《 json 》 字段

    Mysql / MariaDB 操作 《 json 》 字段


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


    前言

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


    环境

    数据库:10.3.24-MariaDB (**如果是mysql需要大于5.7版本**)
    
    文档:[JSON_SEARCH - MariaDB Knowledge Base](https://mariadb.com/kb/en/json_search/)  https://mariadb.com/kb/en/json_search/
    
    • 1
    • 2
    • 3

    一、数据库结构

    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
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    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"}] |
    +-----+----------------------+-----------------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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'
    
    • 1

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

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

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

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

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

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

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

    三、常用方法

    方法名参数使用方法备注
    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’)根据路径提取值(带引号)

    总结

  • 相关阅读:
    何为自制力?如何提高自制力?
    直播回顾 | 论道原生:云原生大数据建设实践
    Nginx 压测方法论和性能指标
    <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 1》(5)
    解开MongoDB之谜
    主成分分析法在图像压缩和重建中的应用研究-含Matlab代码
    蓝桥杯【第14届国赛】Python B组
    9月15日作业
    Linux系统目录管理
    【linux】[OOM]now anon-rss:0kB, file-rss:0kB, shmem-rss:280kB
  • 原文地址:https://blog.csdn.net/mtl1994/article/details/127413332