惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
博客园 - 【当耐特】
AWS News Blog
AWS News Blog
U
Unit 42
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
T
Tor Project blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Recorded Future
Recorded Future
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
Latest news
Latest news
GbyAI
GbyAI
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Hacker News: Ask HN
Hacker News: Ask HN
美团技术团队
N
News | PayPal Newsroom
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Hacker News
The Hacker News
The GitHub Blog
The GitHub Blog
V
V2EX
N
News and Events Feed by Topic
T
Troy Hunt's Blog
Security Latest
Security Latest
博客园 - 叶小钗
P
Palo Alto Networks Blog

博客园 - 陈惟鲜的博客

AI软件修改脚本与代码,还真不敢完全操作 linux 磁盘满了,排查 Ecelipse 安装 MAT linux 增加新磁盘 redis自身查询很慢 排查redis-benchmark prometheus监控mysql数据库 prometheus监控springboot项目配置 监控工具prometheus配置-docker版 linux 文件属性被替换修改查询并修改 ----i----------- ZonedDateTime 转为 java.util.Date docker 容器查看jvm参数配置 redis 事务处理,一旦异常,则回滚 linux 下安装使用jmeter 执行压测 大批量订单来了由于入库慢,先缓存后通知入库 eclipse 合并错分支代码还原,合并到本分支但未push到库上 maven打包慢,使用maven-mvnd 打包可以快一半 postman 参数化构建 批量测试 postman 常用参数例子 使用AOP实现+自定义注解 实现 缓存 如何判断redis慢了
mysql 查询jason格式数据
陈惟鲜的博客 · 2023-07-08 · via 博客园 - 陈惟鲜的博客

简单查询。

很多时候有复杂结构,我们存储为json格式,但字段很复杂。

假设有一个名为data的JSON字段,可以使用以下语法提取其中的值。

SELECT data->'$.key' FROM table_name;

使用JSON_CONTAINS函数可以过滤JSON数组中包含特定值的记录。例如,假设有一个名为data的JSON字段,其中包含一个名为tags的数组,可以使用以下语法过滤包含特定标签的记录:

SELECT JSON_LENGTH(data->'$.array_field') FROM table_name;

使用JSON_KEYS函数可以查询JSON字段中的键名。例如,假设有一个名为data的JSON字段,可以使用以下语法查询其键名:

SELECT JSON_KEYS(data) FROM table_name;

提取JSON字段的值​

  • ​使用 -> 和 ->> 操作符​:
    -- 提取name字段(带引号)
    SELECT json_data->'$.name' FROM table;
    
    -- 提取name字段并去除引号
    SELECT json_data->>'$.name' FROM table;
  • 条件查询​​根据键值过滤​

  • -- 字符串比较(推荐使用->>)
    SELECT * FROM table WHERE json_data->>'$.name' = 'John';
    
    -- 数值比较
    SELECT * FROM table WHERE JSON_EXTRACT(json_data, '$.age') = 30;
    SELECT * FROM table WHERE json_data->>'$.user.address.city' = 'New York';
  • 检查键或路径是否存在

  • -- 检查是否存在email字段
    SELECT * FROM table WHERE JSON_CONTAINS_PATH(json_data, 'one', '$.email');
    
    -- 检查多路径是否存在(all表示所有路径必须存在)
    SELECT * FROM table WHERE JSON_CONTAINS_PATH(json_data, 'all', '$.name', '$.age');
  • 处理JSON数组​​查询数组包含特定值​:

  • -- 查找tags数组包含"mysql"
    SELECT * FROM table WHERE JSON_CONTAINS(json_data->'$.tags', '"mysql"', '$');
    
    
    -- 获取第一个hobby(索引从0开始)
    SELECT json_data->>'$.hobbies[0]' FROM table;
  • 更新JSON数据​​​:

  • ​修改字段值​:
    UPDATE table SET json_data = JSON_REPLACE(json_data, '$.age', 31) WHERE id = 1;
    
    新增字段​:
    UPDATE table SET json_data = JSON_INSERT(json_data, '$.email', 'john@example.com') WHERE id = 1;
    
    
    删除字段​:
    UPDATE table SET json_data = JSON_REMOVE(json_data, '$.oldKey') WHERE id = 1;

    追加数组元素​:
    UPDATE table SET json_data = JSON_ARRAY_APPEND(json_data, '$.tags', 'new_tag');

  • 创建索引优化查询

  • 生成虚拟列并创建索引​:
    ALTER TABLE table
      ADD COLUMN name_virtual VARCHAR(50) AS (json_data->>'$.name'),
      ADD INDEX (name_virtual);
  • 展开JSON数组为行(MySQL 8.0+)​

  • SELECT t.id, j.tag
    FROM table t
    JOIN JSON_TABLE(
      t.json_data->'$.tags',
      '$[*]' COLUMNS (tag VARCHAR(50) PATH '$')
    ) AS j;