mysql根据json字段内容作为查询条件(包括json数组),检索数据

最近用到了mysql5.7的json字段的检索查询,发现挺好用的,记录一下笔记
我们有一个日志表,里面的data字段是保存不同对象的json数据,遇到想根据里面的json的字段内容作为条件查询的情况

mysql根据json字段的内容检索查询数据

  1. 使用 字段->'$.json属性'进行查询条件
  2. 使用json_extract函数查询,json_extract(字段,"$.json属性")
  3. 根据json数组查询,用JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))

在这里插入图片描述

mysql5.7以上支持json的操作,以及增加了json存储类型
一般数据库存储json类型的数据会用json类型或者text类型

注意:用json类型的话
1)JSON列存储的必须是JSON格式数据,否则会报错。
2)JSON数据类型是没有默认值的。

查询根据表字段的json内容进行查询

  1. 首先创建表
create table log(
     id int not null,
	 content varchar(255),
	 createTime TIMESTAMP,
	 data text
)
  1. 插入几个测试数据
    在这里插入图片描述
  2. 执行查询sql

使用 字段->’$.json属性’进行查询条件

select  * from log where data->'$.id' = 142;

 select data->'$.id' id,data->'$.name' name from log where data->'$.id' = 142;

在这里插入图片描述

测试根据json数组的字段查询
1.再建一个表log2,插入几条json数组数据

[{
		"id": "141",
		"name": "xxx",
		"type": "input"
	},
	  {
		  "id": "142",
		  "name": "xin",
		  "type": "textarea"
	  }
]

在这里插入图片描述
查询json数组里面对象的id等于142的记录

用JSON_CONTAINS(字段,JSON_OBJECT(‘json属性’, “内容”))

select * from log2 where JSON_CONTAINS(data,JSON_OBJECT('id', "142"))

在这里插入图片描述

参考:
Simon格子的MySQL 5.7新增对JSON支持

MySQL中,可以使用一些函数和操作符来查询JSON字段。下面是一些常用的MySQL JSON查询使用方法: 1. 提取JSON字段的值:可以使用`->`操作符来提取JSON字段中的值。例如,如果有一个名为data的JSON字段,可以使用以下语法来提取其中的值: ``` SELECT data->'$.key' FROM table_name; ``` 其中,`key`是JSON对象中的属性名。 2. 查询JSON字段数组或对象的长度:可以使用`JSON_LENGTH`函数来查询JSON字段数组或对象的长度。例如,如果有一个名为data的JSON字段,可以使用以下语法来查询其长度: ``` SELECT JSON_LENGTH(data->'$.array_field') FROM table_name; ``` 其中,`array_field`是JSON字段中的数组或对象字段名。 3. 根据JSON字段内容进行检索查询数据:可以使用`json_extract`函数进行查询,语法为: ``` json_extract(字段, "$.json属性") ``` 可以使用`JSON_CONTAINS`函数根据JSON数组进行查询,语法为: ``` JSON_CONTAINS(字段, JSON_OBJECT('json属性', '内容')) ``` 其中,`json属性`是JSON对象中的属性名,`内容`是要匹配的值。 希望以上信息对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql根据json字段内容作为查询条件(包括json数组)检索数据](https://blog.csdn.net/cbaln0/article/details/127550640)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mysqljson类型查询](https://blog.csdn.net/weixin_44485508/article/details/131574430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值