mysql数据库中如何使用JSON数据类型

P粉602998670
发布: 2025-11-10 08:33:03
原创
125人浏览过
MySQL从5.7起支持JSON类型,可便捷存储配置与动态字段。1. 创建含JSON列的表;2. 插入合法JSON数据;3. 用JSON_EXTRACT或->提取值;4. 使用JSON_SET等修改字段;5. 支持JSON路径条件查询;6. 可建虚拟列加索引优化性能。

mysql数据库中如何使用json数据类型

MySQL从5.7版本开始支持JSON数据类型,这让在数据库中存储和操作JSON格式的数据变得非常方便。使用JSON类型可以避免频繁的表结构变更,尤其适合存储配置、动态字段或嵌套信息。

1. 创建包含JSON字段的表

在建表时可以直接定义JSON类型的列:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    info JSON
);
登录后复制

上面的info字段就可以存储合法的JSON数据,比如对象、数组、字符串、数字等。

2. 插入JSON数据

插入时可以直接写JSON格式的字符串,MySQL会自动校验其合法性:

INSERT INTO users (name, info) VALUES 
('Alice', '{"age": 28, "city": "Beijing", "hobbies": ["reading", "swimming"]}'),
('Bob',   '{"age": 32, "city": "Shanghai", "is_active": true}');
登录后复制

如果JSON格式不合法,比如引号不匹配或语法错误,MySQL会报错拒绝插入。

3. 查询JSON字段内容

MySQL提供了多种函数来提取JSON中的值:

  • JSON_EXTRACT(json_col, path):根据路径提取值
  • ->:等价于JSON_EXTRACT,语法更简洁
  • ->>:提取并去掉引号(适用于字符串)

示例:

-- 提取年龄
SELECT name, JSON_EXTRACT(info, '$.age') AS age FROM users;
<p>-- 使用 -> 简写
SELECT name, info->'$.city' AS city FROM users;</p><p>-- 提取数组第二个爱好(索引从0开始)
SELECT name, info->'$.hobbies[1]' AS hobby FROM users;</p><p>-- 提取字符串值时不带引号
SELECT name, info->>'$.city' AS city FROM users;</p>
登录后复制

4. 修改JSON字段

使用JSON_SET、JSON_REPLACE、JSON_INSERT等函数可以更新部分字段:

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online
  • JSON_SET:设置值(存在则修改,不存在则添加)
  • JSON_REPLACE:仅替换已有字段
  • JSON_REMOVE:删除指定路径的字段

示例:

-- 更新城市并添加新字段
UPDATE users 
SET info = JSON_SET(info, '$.city', 'Guangzhou', '$.level', 3)
WHERE name = 'Alice';
<p>-- 删除某个字段
UPDATE users 
SET info = JSON_REMOVE(info, '$.is_active')
WHERE name = 'Bob';</p>
登录后复制

5. 在JSON字段上查询条件

可以用JSON路径表达式作为查询条件:

-- 查找年龄大于30的用户
SELECT * FROM users WHERE info->'$.age' > 30;
<p>-- 查找爱好包含'swimming'的用户(需用JSON_CONTAINS)
SELECT * FROM users 
WHERE JSON_CONTAINS(info->'$.hobbies', '"swimming"');</p>
登录后复制

6. 建立虚拟列和索引优化查询

由于不能直接对JSON字段建索引,但可以通过创建虚拟列并为其加索引提升性能:

ALTER TABLE users 
ADD COLUMN city_v AS (info->>'$.city') STORED;
<p>CREATE INDEX idx_city ON users(city_v);</p>
登录后复制

这样在查询city字段时就能利用索引加速。

基本上就这些。合理使用JSON类型能提升灵活性,但复杂查询或高频检索场景建议还是拆分到常规字段。注意保持JSON结构清晰,避免过度嵌套。

以上就是mysql数据库中如何使用JSON数据类型的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号