共计 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 行业资讯频道。