MySQL中JSON_CONTAINS函数详细用法示例​及场景

 更新时间:2025年06月19日 10:39:31   作者:悟能不能悟  
这篇文章主要介绍了MySQL中JSON_CONTAINS函数详细用法示例​及场景的相关资料,MySQL JSON_CONTAINS检查目标JSON是否包含搜索值,文中将用法介绍的非常详细,需要的朋友可以参考下

前言

MySQL中的JSON_CONTAINS函数用于检查一个JSON文档(目标)是否包含另一个JSON文档(搜索值)。以下是其详细用法:

函数语法​

JSON_CONTAINS(target_json, search_json [, path])
  • target_json​:要检查的目标JSON文档。
  • search_json​:要搜索的JSON值或结构。
  • path​(可选):指定在目标JSON中的具体路径。若未指定,默认检查整个文档。

返回值​:

  • 1:目标包含搜索值。
  • 0:目标不包含搜索值。
  • NULL:参数为NULL或路径不存在。

​使用场景和示例​

​1. 检查数组是否包含元素​

  • 示例表​:

    CREATE TABLE users (
        id INT PRIMARY KEY,
        tags JSON
    );
    INSERT INTO users VALUES
    (1, '["mysql", "database", "developer"]'),
    (2, '["python", "web", "tester"]'),
    (3, '["java", "backend", "developer"]');
  • 查询包含"developer"标签的用户​:

    SELECT * FROM users 
    WHERE JSON_CONTAINS(tags, '"developer"', '$');

    或简写:

    SELECT * FROM users 
    WHERE JSON_CONTAINS(tags, '"developer"');

    注意​:字符串需用双引号包裹,外层用单引号。

​2. 检查对象是否包含键值对​

  • 示例数据​:

    {"name": "Alice", "age": 30, "skills": ["SQL", "Java"]}
  • 查询包含"name": "Alice"的对象​:

    SELECT * FROM profiles 
    WHERE JSON_CONTAINS(data, '{"name": "Alice"}');

​3. 嵌套结构和路径参数​

  • 示例数据​:

    {"department": {"team": ["Alice", "Bob"], "id": 101}}
  • ​**检查team数组是否包含"Bob"**​:

    SELECT JSON_CONTAINS(
      '{"department": {"team": ["Alice", "Bob"], "id": 101}}',
      '"Bob"',
      '$.department.team'
    ); -- 返回1

​4. 数据类型严格匹配​

JSON区分数据类型,如数字3和字符串"3"不匹配:

SELECT JSON_CONTAINS('[1, 2, 3]', '3');      -- 返回1(数值3)
SELECT JSON_CONTAINS('[1, 2, "3"]', '"3"');  -- 返回1(字符串"3")
SELECT JSON_CONTAINS('[1, 2, 3]', '"3"');   -- 返回0(类型不匹配)

​5. 通配符路径​

  • 示例数据​:

    {"employees": [{"name": "Alice"}, {"name": "Bob"}]}
  • ​**检查任意name是否为"Bob"**​:

    SELECT JSON_CONTAINS(
      '{"employees": [{"name": "Alice"}, {"name": "Bob"}]}',
      '"Bob"',
      '$.employees[*].name'
    ); -- 返回1

​注意事项​

  • 路径存在性​:若路径不存在,返回NULL

    SELECT JSON_CONTAINS('{"a": 1}', '1', '$.b'); -- 返回NULL
  • 对象匹配​:搜索对象时,必须完全包含所有键值对。

    SELECT JSON_CONTAINS('{"a":1, "b":2}', '{"a":1}'); -- 返回1
    SELECT JSON_CONTAINS('{"a":1}', '{"a":1, "b":2}'); -- 返回0
  • 数组子集​:搜索数组时,目标数组需包含搜索数组所有元素(顺序无关)。

    SELECT JSON_CONTAINS('[1,2,3]', '[3,1]'); -- 返回1
    SELECT JSON_CONTAINS('[1,2,3]', '[1,4]'); -- 返回0

​总结​

JSON_CONTAINS适用于验证JSON结构中的存在性,需注意:

  • 正确使用路径和数据类型。
  • 对象需完全匹配键值对,数组需包含所有元素。
  • 结合路径通配符(*)可灵活处理嵌套数据。

到此这篇关于MySQL中JSON_CONTAINS函数详细用法示例​及场景的文章就介绍到这了,更多相关MySQL JSON_CONTAINS函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql中深分页的五种常用方法整理

    Mysql中深分页的五种常用方法整理

    在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择
    2025-03-03
  • MySQL校对规则(COLLATION)的具体使用

    MySQL校对规则(COLLATION)的具体使用

    本文主要介绍了MySQL校对规则(COLLATION)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • mysql启动时出现ERROR 2003 (HY000)问题的解决方法

    mysql启动时出现ERROR 2003 (HY000)问题的解决方法

    这篇文章主要为大家详细介绍了mysql启动时出现ERROR 2003 (HY000问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 由不同的索引更新解决MySQL死锁套路

    由不同的索引更新解决MySQL死锁套路

    前几篇文章介绍了用源码的方式来调试锁相关的信息,这里同样用这个工具来解决一个线上实际的死锁案例,下面小编来简单介绍下
    2019-05-05
  • SQL调优核心战法之索引失效场景与Explain深度解析

    SQL调优核心战法之索引失效场景与Explain深度解析

    在数据库性能治理中,SQL调优是提升系统吞吐量的核心抓手,本文通过六大典型索引失效场景剖析、Explain执行计划深度解读及权威优化策略,感兴趣的小伙伴可以了解下
    2025-12-12
  • 大幅提升MySQL中InnoDB的全表扫描速度的方法

    大幅提升MySQL中InnoDB的全表扫描速度的方法

    这篇文章主要介绍了大幅提升MySQL中InnoDB的全表扫描速度的方法,作者谈到了预读取和多次async I/O请求等方法,减小InnoDB对MySQL速度的影响,需要的朋友可以参考下
    2015-06-06
  • 2022最新版MySQL 8.0.30 安装及配置教程(小白入门)

    2022最新版MySQL 8.0.30 安装及配置教程(小白入门)

    这篇文章主要介绍了2022最新版MySQL 8.0.30 安装及配置教程,安装过程算是比较简单的,今天给大家分享的此文比较适合mysql数据库的小白,需要的朋友可以参考下
    2022-09-09
  • MySQL中IO问题的深入分析与优化

    MySQL中IO问题的深入分析与优化

    据库作为存储系统,所有业务访问数据的操作都会转化为底层数据库系统的IO行为,下面这篇文章主要给大家介绍了关于MySQL中IO问题的深入分析与优化的相关资料,需要的朋友可以参考下
    2022-04-04
  • Mysql5.6启动内存占用过高解决方案

    Mysql5.6启动内存占用过高解决方案

    vps的内存为512M,安装好nginx,php等启动起来,mysql死活启动不起来看了日志只看到对应pid被结束了,后跟踪看发现是内存不足被killed;mysql5.6启动内存占用过高怎么办呢,下面小编给大家解答下
    2016-09-09
  • SQL中Lag()和LEAD()的用法示例详解

    SQL中Lag()和LEAD()的用法示例详解

    LAG和LEAD函数为SQL开发者提供了强大的数据洞察力,尤其是在处理时间序列和趋势分析问题时,下面这篇文章主要介绍了SQL中Lag()和LEAD()用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10

最新评论