mysql json 数据结构查询

 
更多

mysql json 数据结构查询。

创建表结构:

CREATE TABLE `test`.`test_json` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `attrs` JSON NULL DEFAULT NULL , 
    `type` JSON NULL DEFAULT NULL , 
PRIMARY KEY (`id`)) ENGINE = InnoDB COMMENT = '测试json数据查询';

插入测试数据:

INSERT INTO `test_json` (`attrs`, `type`) 
 VALUES (
 JSON_OBJECT("name","张三","age",20,"strage","20","data",JSON_ARRAY("新品","热销",1,"0")), 
 JSON_ARRAY("新品","热销",1,"0")
 ) ;

INSERT INTO `test_json` (`attrs`, `type`) 
 VALUES (
 JSON_OBJECT("name","李四","age",18,"strage","16","data",JSON_ARRAY("老品","滞销",2,"3")), 
 JSON_ARRAY("老品","滞销",2,"3")
 ) ;

数据截图显示如下:

由数据可知,attrs 字段是一个带 key 的 json 字符串值,type 字段是一个不带 key 的 json 字符串值

查询 type 字段的值包含 “新品”的数据:

SELECT * FROM test_json WHERE JSON_CONTAINS(type, '"新品"');

注意:

SELECT * FROM test_json WHERE JSON_CONTAINS(type, '新品'); //错误示范,少双引号
//会报错,错误:#3141 - Invalid JSON text in argument 1 to function json_contains: "Invalid value." at position 0.

查询 attrs 字段的值的 age 值为 20 的数据:

SELECT * FROM test_json WHERE JSON_CONTAINS(attrs, '20', '$.age');

查询 attrs 字段的值的 data 值包含 “新品”的数据:

SELECT * FROM test_json WHERE JSON_EXTRACT(attrs, '$.data') LIKE '%新品%';

查询 attrs 字段的值的 data 值精确包含 “新品”的数据:

SELECT * FROM test_json WHERE JSON_CONTAINS(attrs->'$.data', CAST('["新品"]' AS JSON));
打赏

本文固定链接: https://www.cxy163.net/archives/2945 | 绝缘体

该日志由 绝缘体.. 于 2024年07月03日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: mysql json 数据结构查询 | 绝缘体
关键字: , , , ,

mysql json 数据结构查询:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter