MySQL之JSON类型字段怎么使用

56次阅读
没有评论

共计 4267 个字符,预计需要花费 11 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 MySQL 之 JSON 类型字段怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

测试环境:MySQL8.0.19

准备工作

CREATE TABLE json_demo ( 
 `id` INT ( 11 ) NOT NULL PRIMARY KEY, 
 `content` json NOT NULL 
INSERT INTO json_demo ( id, content )
VALUES
 /* 这条是数组 */
 ( 1,  [{ key : 1,  order : 1,  value :  34252},{key : 2,  order : 2,  value :  23423}]  ),
 /* 这条是数组 */
 ( 2,  [{ key : 4,  order : 4,  value :  234},{key : 5,  order : 5,  value :  234324523}]  ),
 /* 这条是对象 */
 ( 3,  { key : 3,  order : 3,  value :  43242}  ),
 /* 这条是对象 */
 ( 4,  { key : 6,  order : 6,  value :  5423}  );

JSON 对象基础操作

查询指定字段值

/*  基础查询  */
SELECT
 content -   $.key  AS  key ,
 JSON_EXTRACT(content,  $.key) AS  key2 ,
 content -   $.value  AS  value ,
 JSON_EXTRACT(content,  $.value) AS  value2 ,
 content -   $.value  AS  value3 ,
 JSON_UNQUOTE(JSON_EXTRACT(content,  $.value)) AS  value4 
 json_demo 
WHERE
 id   2;

TIPS:

– 和 - 是 MySQL 设计的语法,其中 - 在 MySQL5.7 支持,- 在 MySQL8.0 中支持。

– 等效于 JSON_EXTRACT(),当查询字段为字符串时,其返回值还会带有。

– 等效于 JSON_UNQUOTE(JSON_EXTRACT()),当查询字段为字符串时,其返回值不会带有。

用于条件查询

content – $.key 可以看成一个字段,一个字段能做的操作基本他都能。

SELECT
 content -   $.key  AS  key ,
 content -   $.value  AS  value3 
 json_demo 
WHERE
 id   2
 AND content -   $.key    1
 AND content -   $.value  like  %2%

修改指定字段值

/*  修改  */
UPDATE json_demo 
SET content = JSON_REPLACE(
 content,
 /*  将 content.key 值  + 1 */
 $.key , content -   $.key  + 1,
 /*  将 content.value 值后拼接 abc  */
 $.value , concat(content -   $.value ,  abc)
) WHERE id = 3;
/* JSON_SET 也可以  */
UPDATE json_demo 
SET content = JSON_SET(
 content,
 /*  将 content.key 值  + 1 */
 $.key , content -   $.key  + 1,
 /*  将 content.value 值后拼接 abc  */
 $.value , concat(content -   $.value ,  abc)
) WHERE id = 3;
/*  查询修改结果  */
SELECT id,content,content -   $.key  AS  key ,content -   $.value  AS  value3 
FROM json_demo WHERE id = 3;
/*  重新赋值  */
UPDATE json_demo SET 
content = JSON_REPLACE(content, $.key ,3, $.value , 43242) WHERE id = 3;

TIPS:

JSON_REPLACE 和 JSON_SET 都可以用来修改某个字段值,区别在于 JSON_REPLACE 替换不存在的属性时操作无效;而 JSON_SET 则会将这个不存在的属性插入进去。

所以 JSON_SET 也可以用来追加属性,与 JSON_INSERT 类似。区别在于 JSON_INSERT 如果插入一个已存在的属性时操作会失效,而 JSON_SET 会替换。

追加元素

UPDATE json_demo 
SET content = JSON_INSERT(content,  $.key , 234)
WHERE id = 3;
SELECT id,content,content -   $.key  AS  key  FROM json_demo WHERE id = 3;
UPDATE json_demo 
SET content = JSON_INSERT(content,  $.temp , 234)
WHERE id = 3;
SELECT id,content,content -   $.key  AS  key  FROM json_demo WHERE id = 3;
UPDATE json_demo 
SET content = JSON_SET(content,  $.temp2 , 432)
WHERE id = 3;
SELECT id,content,content -   $.key  AS  key  FROM json_demo WHERE id = 3;

JSON 数组操作

查询指定字段值

SELECT
 content -   $[*].key  AS  key ,
 content -   $[*].value  AS  value ,
 content -   $[0].key  AS  key2 ,
 content -   $[0].value  AS  value2 ,
 /*  查询数组长度  */
 JSON_LENGTH(content) AS  length 
 json_demo 
WHERE
 id   3;

用于条件查询

SELECT
 content -   $[*].key  AS  key ,
 content -   $[*].value  AS  value 
 json_demo 
WHERE
 id   3
 /* content.value 的值中存在 like %34% 的值  */
 AND content -   $[*].value  like  %34% 
 /* content.key 的值中有 4  */
 AND JSON_OVERLAPS(content -   $[*].key ,  4  );

修改指定字段值

基础操作都跟 JSON 对象差不太多,就是在 $ 后面加对应的索引位 $[0],指定所有则 $[*]。如果数组中包含数组,可以通过 $[1][2][3] 这种方式指定深层的数组元素。

追加元素

JSON_ARRAY_APPEND 和 JSON_ARRAY_INSERT 都可以实现数组元素追加。区别在于 JSON_ARRAY_APPEND 可以不指定索引位,此时往最后位置追加;JSON_ARRAY_INSERT 必须指定索引位,不指定则会报错。

JSON_ARRAY_APPEND 是追加在指定索引位后面,而 JSON_ARRAY_INSERT 则是插入到指定索引位前面。

更多操作名称描述 JSON_ARRAY() 创建 JSON 数组 JSON_ARRAY_APPEND() 将数据附加到 JSON 文档 JSON_ARRAY_INSERT() 插入 JSON 数组 JSON_CONTAINS()JSON 文档是否在路径中包含特定对象 JSON_CONTAINS_PATH()JSON 文档是否在路径中包含任何数据 JSON_DEPTH()JSON 文档的最大深度 JSON_EXTRACT() 从 JSON 文档返回数据 JSON_INSERT() 将数据插入 JSON 文档 JSON_KEYS()JSON 文档中的键数组 JSON_LENGTH()JSON 文档中的元素数 JSON_MERGE()(已弃用)合并 JSON 文档,保留重复的键。JSON_MERGE_PRESERVE()的已弃用同义词 JSON_MERGE_PATCH() 合并 JSON 文档,替换重复键的值 JSON_MERGE_PRESERVE() 合并 JSON 文档,保留重复的键 JSON_OBJECT() 创建 JSON 对象 JSON_OVERLAPS()(8.0.17 引入)比较两个 JSON 文档,如果它们具有共同的任何键值对或数组元素,则返回 TRUE(1),否则返回 FALSE(0)JSON_PRETTY() 以易于阅读的格式打印 JSON 文档 JSON_QUOTE() 引用 JSON 文档 JSON_REMOVE() 从 JSON 文档中删除数据 JSON_REPLACE() 替换 JSON 文档中的值 JSON_SCHEMA_VALID()(8.0.17 引入)根据 JSON 模式验证 JSON 文档;如果文档针对架构进行了验证,则返回 TRUE / 1;否则,则返回 FALSE / 0。JSON_SCHEMA_VALIDATION_REPORT()(8.0.17 引入)根据 JSON 模式验证 JSON 文档;以 JSON 格式返回有关验证结果的报告,包括成功或失败以及失败原因 JSON_SEARCH()JSON 文档中值的路径 JSON_SET() 将数据插入 JSON 文档 JSON_STORAGE_FREE() 部分更新后,JSON 列值的二进制表示形式中的可用空间 JSON_STORAGE_SIZE() 用于存储 JSON 文档的二进制表示形式的空间 JSON_TABLE() 从 JSON 表达式返回数据作为关系表 JSON_TYPE()JSON 值类型 JSON_UNQUOTE() 取消引用 JSON 值 JSON_VALID()JSON 值是否有效 JSON_VALUE()(8.0.21 引入)在提供的路径所指向的位置从 JSON 文档中提取值;以 VARCHAR(512)或指定的类型返回此值 MEMBER OF()(8.0.17 引入)如果第一个操作数与作为第二个操作数传递的 JSON 数组的任何元素匹配,则返回 true(1),否则返回 false(0)

以上就是“MySQL 之 JSON 类型字段怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计4267字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)