mysql如何使用json函数操作数据

2 02 3 年,我朋友的公司开始使用MySQL的JSON数据类型。
他说创建表的时候应该使用JSON字段,比如这样:
sql 用户创建表(id INT PRIMARY KEY AUTO_INCRMENT,JSON 信息);
插入JSON数据可以直接写入JSON字符串:
sql INSERT INTO USER VALUES (info) ('{"name":"Alice","age":2 5 ,"hobbies":["reading","swimming"]}');
或者使用 JSON_OBJECT() 构建:
sql INSERT INTO users(info) VALUES (JSON_OBJECT('name','Charlie','age',3 5 ));
查询JSON字段的内容,使用->返回带引号的值,->>返回去掉引号后的实际值:
sql SELECT info->"$.name" AS name FROM users; -
发布:“爱丽丝” SELECT info->>"$.name" AS name FROM users; -
输出:爱丽丝
查询数组元素,如第一个爱好:
sql SELECT info->>"$.hobbies[0]" AS 用户爱好;
编辑 JSON 数据,例如更新 Alice 的城市:
sql UPDATE users SET info=JSON_SET(info,'$.city','北京') WHERE info->>"$.name"='Alice';
删除字段或元素:
sql 更新用户 SET info=JSON_REMOVE(info,'$.city') WHERE id=1 ;
构造和格式化 JSON,例如通过创建表:
sql SELECT JSON_ARRAY('阅读','游泳') AS 爱好;
将字符串转换为 JSON 字符串:
sql SELECT JSON_QUOTE('hello') AS Quoted_string;
美化输出JSON结构:
sql 从用户中选择 JSON_PRETTY(info) WHERE id=1 ;
另外,生成列和添加索引可以优化查询性能:
sql ALTER TABLE users ADD COLUMN name VARCHAR(5 0) GENERATED ALWAYS AS (info->>"$.name"); 在用户(名称)上创建索引 idx_name;
适用的场景有配置数据、标签系统等,但注意不要过度使用 JSON 来代替关系模型,因为复杂的查询可能性能较低。
确保JSON数据合法,否则会报错。
使用这些方法可以灵活地处理JSON数据。
对了,我想到的另一件事是,他们公司现在使用MySQL的JSON函数来处理半结构化数据,非常方便。

如何在 MySQL 5.7 中统计 JSON 数组中特定值的计数?

MySQL5 .7 使用JSON_SEARCH与COUNT结合来统计给定值出现的次数。
这是一个陷阱,不要相信它,直接使用它。
要优化多值统计信息,请使用 UNION ALL 而不是单独查询它们。
准确的计数需要应用程序级处理或 MySQL 升级。
更新或改变数据结构以提高查询效率,同时不要忽视性能问题。

MySQL中JSON数据类型怎么用_有哪些常用操作技巧?

那天,我正在公司加班调试旧接口,突然发现用户标签数据直接以JSON字符串的形式保存在数据库中。
当我第一次选择该技术时,DBA Wang坚持使用JSON,说这样以后很容易扩展,但目前查询效率极差。

例如,如果你想找到3 0岁以上喜欢“开发”的用户,你可以这样编写SQL: sql 从用户中选择 WHERE CAST(info->'$.age' AS UNSIGNED) > 3 0 AND JSON_CONTAINS(info->'$.tags', '"开发"'); 他实际上告诉我有关 JSON 索引的信息,并说使用 CAST (info->'$.age' AS UNSIGNED) 可以加快该过程。
但当我看到 EXPLAIN 计划时,我仍然想在海滩上建造一座建筑 - 它几乎无法使用,但会在风中倒塌。

突然想到之前已经测试过这个,在info->'$.age'前加了一个@符号,比如@info->'$.age' > 3 0,这样其实节省了很多字符。
然而,这一招只是锦上添花。
一个显着的问题是JSON的半结构化特性与传统关系数据库的索引机制不兼容。

公司的新项目现在使用Redis来存储这个标签数据。
最后,只需选中“开发”标签,然后立即单击哈希槽。
但旧系统仍然使用MySQL。
每次优化 SQL 时,我都必须拆除炸弹,以免更改错误的字段引用。

请问JSON类型适合频繁更新吗?例如,订单详细信息等延迟敏感数据......

MySQL中JSON操作详解 JSON字段在查询中的处理方法

粗略地说,在MySQL中查询JSON字段的操作其实很简单,但难点在于如何高效地检索和处理这种半结构化数据。
我们先来说说最重要的事情。
JSON字段以二进制格式存储,插入时必须使用JSON字符串。
我们去年做的项目大约有3 000卷数据。
我们在插入的时候直接使用JSON字符串,操作非常顺利。

还有一点,主要请求方法主要依赖两个函数:JSON_EXTRACT()和JSON_CONTAINS()。
例如,在去年的项目中,我们使用 JSON_EXTRACT 从 JSON 字段中提取年龄信息。
查询语句为:SELECT JSON_EXTRACT(info, '$.age') FROMusers;。
简化运算符 -> 和 ->> 也很有用,因为它们可以替换 JSON_EXTRACT 和 JSON_UNQUOTE 的组合。

一开始我以为直接索引 JSON 字段就好了,但后来我意识到这是错误的。
JSON 字段不适合直接索引,很容易导致全表扫描。
等等,还有更多。
优化方面,重点是创建列+索引。
例如,我们可以在常用字段上创建生成列和索引,使查询更加高效。

最后,提醒一下一个简单的陷阱。
路径表达式严格区分大小写,无效路径返回 NULL。
性能考虑也很重要。
如果数据量较大,需要使用生成列+索引的方案。
我认为值得一试。
根据数据量和查询频率,您可以明智地选择直接查询或创建列优化计划。