mysql有没有json类型?

MysqL有json类型。MysqL从5.7版本开始,引入了JSON数据类型,可以直接操作json数据;但MysqL5.7版本以下,在表中保存JSON格式类型的数据,则需要依靠varchar或者text之类的数据类型。

MysqL中的JSON类型

json是一个非常好用的数据类型,在MysqL5.7之前人们都是用string来储存json的,但是这样有个问题就是不能操作json,5.7以后就可以直接操作json数据了。

  1. 创建没什么好说的就是json 不用带长度认为0
  2. 更新 、和插入可以用string插入
  3. 查询、个人不喜欢把数据交给后台处理,那就交给数据库处理吧例子如下:
  4. 数据库某张表有个content_json字段,里面有这样的数据!
{
  bill: [
    {
      bill: [
        {
          id: C81AEAD03F90000142E81B405F6FADC0,
          uuid: cfd872541b3b4507a50c2b2eda6bef28,
          billid: kjdzyljgmzsfzypj,
          pageno: [],
          billver: V1,
          billname: 新增测试,
          fjNumber: ,
          trueName: ,
          allPageno: [
            {
              top: 13,
              left: 7
            }
          ],
          billValue: {},
          isOtherZL: ,
          billNumber: ,
          fjTMNumber: 
        },
        {
          id: C81AED69D6400001A07818551D9EBEC0,
          uuid: 05d87c8052cd44209c684407d200b7ec,
          billid: opztsfpsgd,
          pageno: [],
          billver: V1,
          billname: 发票申购,
          fjNumber: ,
          trueName: ,
          allPageno: [
            {
              top: 13,
              left: 7
            }
          ],
          isOtherZL: ,
          billNumber: ,
          fjTMNumber: 
        }
      ],
      index: ,
      dependBjBill: {
        formula: ,
        keyview: 
      },
      codeCondition: {
        formula: ,
        keyview: 
      },
      billRuleCondition: {
        formula: ,
        keyview: 
      }
    },
    {
      bill: [
        {
          id: C81AED84903000019B29EAB0196014CE,
          uuid: 0d93fe614d09489cbad8fa5a3d160289,
          billid: kjdzcwgwht,
          pageno: [],
          billver: V1,
          billname: 财务顾,
          fjNumber: ,
          trueName: ,
          allPageno: [
            {
              top: 39,
              left: 7
            }
          ],
          isOtherZL: ,
          billNumber: ,
          fjTMNumber: 
        }
      ],
      index: ,
      dependBjBill: {
        formula: ,
        keyview: 
      },
      codeCondition: {
        formula: ,
        keyview: 
      },
      billRuleCondition: {
        formula: ,
        keyview: 
      }
    }
  ],
  questions: [],
  relyonCondition: {}
}

结构是这样的,我们要查询最底层uuid!按条件查bill下是一个数组 里面的bill还是一个数组那么要查最底层的uuid怎么查呢?

这里写图片描述


个人更喜欢用类似lambda这种方法毕竟这是一个有逼格又好看的操作:

SELECT content_json->'$.bill[*].bill[*].uuid' 
from  b 
WHERE JSON_CONTAINS(content_json->'$.bill[*].bill[*].uuid' ,'[cfd872541b3b4507a50c2b2eda6bef28]')

查询结果

这里写图片描述

代码分析:
content_json->’$.bill[].bill[].uuid’ ;

表示content_json字段
$是必须符号 点代表对象
*代表全部

那么代码意思就是查询content_json字段里面全部bill(第一个)中全部bill(第二个)的uuid组成一个数组返回;
where后面跟着的条件的意思是 存在某个值 这个值可以是一个也可以是多个
JSON_CONTAINS(字段,参数);
字段必须是要查的指定值如 content_json->’$.bill[].bill[].uuid’ ;
参数必须是json类型 string是不行的。

推荐教程:mysql视频教程

相关文章

目录MySQL卸载环境查看是否已安装MySQL卸载mysql服务查看是否...
目录数据类型数据类型分类数值类型以TINYINT认识整型族有符号...
目录表的约束空属性非空约束(NOT NULL Constraint)默认值定...
目录函数时间日期函数:字符串函数数学函数其他函数 函数 时间...
目录使用C语言连接库的安装C APImysql_initmysql_real_conne...
目录用户用户管理查询所有用户查看当前用户查看当前连接数创...