目录
准备工作
JSON对象基础操作
JSON数组操作
更多操作
首页 数据库 mysql教程 MySQL之JSON类型字段如何使用

MySQL之JSON类型字段如何使用

Apr 17, 2023 pm 06:52 PM
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'
FROM
	json_demo 
WHERE
	id > 2;
登录后复制

MySQL之JSON类型字段如何使用

TIPS:

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

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

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

用于条件查询

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

SELECT
	id,
	content -> '$.key' AS 'key',
	content ->> '$.value' AS 'value3'
FROM
	json_demo 
WHERE
	id > 2
	AND content -> '$.key' > 1
	AND content -> '$.value' like '%2%';
登录后复制

MySQL之JSON类型字段如何使用

修改指定字段值

/* 修改 */
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;
登录后复制

MySQL之JSON类型字段如何使用

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;
登录后复制

MySQL之JSON类型字段如何使用

JSON数组操作

查询指定字段值

SELECT
	id,
	content -> '$[*].key' AS 'key',
	content ->> '$[*].value' AS 'value',
	content -> '$[0].key' AS 'key2',
	content ->> '$[0].value' AS 'value2',
	/* 查询数组长度 */
	JSON_LENGTH(content) AS 'length'
FROM
	json_demo 
WHERE
	id < 3;
登录后复制

MySQL之JSON类型字段如何使用

用于条件查询

SELECT
	id,
	content -> &#39;$[*].key&#39; AS &#39;key&#39;,
	content ->> &#39;$[*].value&#39; AS &#39;value&#39;
FROM
	json_demo 
WHERE
	id < 3
	/* content.value的值中存在like&#39;%34%&#39;的值 */
	AND content ->> &#39;$[*].value&#39; like &#39;%34%&#39;
	/* content.key的值中有4 */
	AND JSON_OVERLAPS(content ->> &#39;$[*].key&#39;, &#39;4&#39; );
登录后复制

MySQL之JSON类型字段如何使用

修改指定字段值

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

MySQL之JSON类型字段如何使用

追加元素

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

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

MySQL之JSON类型字段如何使用

更多操作

名称 描述
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类型字段如何使用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

mysql:简单的概念,用于轻松学习 mysql:简单的概念,用于轻松学习 Apr 10, 2025 am 09:29 AM

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

phpmyadmin怎么打开 phpmyadmin怎么打开 Apr 10, 2025 pm 10:51 PM

可以通过以下步骤打开 phpMyAdmin:1. 登录网站控制面板;2. 找到并点击 phpMyAdmin 图标;3. 输入 MySQL 凭据;4. 点击 "登录"。

MySQL:世界上最受欢迎的数据库的简介 MySQL:世界上最受欢迎的数据库的简介 Apr 12, 2025 am 12:18 AM

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

为什么要使用mysql?利益和优势 为什么要使用mysql?利益和优势 Apr 12, 2025 am 12:17 AM

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

redis怎么使用单线程 redis怎么使用单线程 Apr 10, 2025 pm 07:12 PM

Redis 使用单线程架构,以提供高性能、简单性和一致性。它利用 I/O 多路复用、事件循环、非阻塞 I/O 和共享内存来提高并发性,但同时存在并发性受限、单点故障和不适合写密集型工作负载的局限性。

MySQL和SQL:开发人员的基本技能 MySQL和SQL:开发人员的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

MySQL的位置:数据库和编程 MySQL的位置:数据库和编程 Apr 13, 2025 am 12:18 AM

MySQL在数据库和编程中的地位非常重要,它是一个开源的关系型数据库管理系统,广泛应用于各种应用场景。1)MySQL提供高效的数据存储、组织和检索功能,支持Web、移动和企业级系统。2)它使用客户端-服务器架构,支持多种存储引擎和索引优化。3)基本用法包括创建表和插入数据,高级用法涉及多表JOIN和复杂查询。4)常见问题如SQL语法错误和性能问题可以通过EXPLAIN命令和慢查询日志调试。5)性能优化方法包括合理使用索引、优化查询和使用缓存,最佳实践包括使用事务和PreparedStatemen

SQL删除行后如何恢复数据 SQL删除行后如何恢复数据 Apr 09, 2025 pm 12:21 PM

直接从数据库中恢复被删除的行通常是不可能的,除非有备份或事务回滚机制。关键点:事务回滚:在事务未提交前执行ROLLBACK可恢复数据。备份:定期备份数据库可用于快速恢复数据。数据库快照:可创建数据库只读副本,在数据误删后恢复数据。慎用DELETE语句:仔细检查条件,避免误删数据。使用WHERE子句:明确指定要删除的数据。使用测试环境:在执行DELETE操作前进行测试。

See all articles