如何在mysql中处理JSON数据类型

23次阅读

<p>mysql从 5.7 起支持 jsON 类型,可直接存储、查询和操作json 数据。创建表时使用 JSON 字段,如 CREATE table users (id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), profile JSON); MySQL 会验证 JSON 有效性。插入合法 JSON字符串:INSERT INTO users (name, profile) VALUES (‘Alice’, ‘{“age”: 28, “city”: “Beijing”, “hobbies”: [“reading”, “hiking”]}’); 查询可用 -> 和 ->> 提取数据,前者保留引号,后者去除引号便于比较:select name, profile->’$.age’ AS age, profile->>’$.city’ AS city FROM users; 修改 JSON 用 JSON_SET()(更新或添加)、JSON_REPLACE()(仅替换)、JSON_REMOVE()(删除):UPDATE users SET profile = JSON_SET(profile, ‘$.age’, 30, ‘$.city’, ‘Shanghai’) WHERE name = ‘Alice’; 不能直接对 JSON 字段建索引,但可通过生成列提升性能:ALTER TABLE users ADD column city_index VARCHAR(50) GENERATED ALWAYS AS (profile->>’$.city’), CREATE INDEX idx_city ON users(city_index); 可高效查询:SELECT * FROM users WHERE city_index = ‘Shanghai’; JSON 适合灵活结构,但复杂查询影响性能,关键字段建议存为常规列。</p>

如何在 mysql 中处理 JSON 数据类型

MySQL 从 5.7 版本开始支持 JSON数据类型,可以直接存储、查询和操作 JSON 格式的数据。使用 JSON 类型能更灵活地处理非结构化或半结构化数据,无需预先定义所有字段。

存储 JSON 数据

创建表时可以使用 JSON 类型字段来保存 JSON 内容。MySQL 会自动验证插入的值是否为有效 JSON,无效则报错。

示例:

CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  profile JSON
);

插入数据时,传入合法 JSON 字符串:

INSERT INTO users (name, profile) VALUES (‘Alice’, ‘{“age”: 28, “city”: “Beijing”, “hobbies”: [“reading”, “hiking”]}’);

查询 JSON 字段

可以通过路径表达式从 JSON 字段中提取数据。常用函数有 JSON_EXTRACT() 或简写 ->->>

  • -> 返回带引号的 JSON 值(保留格式)
  • ->> 返回去引号的纯值(便于比较)

示例查询:

SELECT name, profile->’$.age’ AS age, profile->>’$.city’ AS city FROM users;

结果中,age 显示为 28(带引号),city 显示为 Beijing(无引号)。

修改 JSON 数据

使用 JSON_SET()JSON_REPLACE()JSON_INSERT() 等函数更新 JSON 内容。

如何在 mysql 中处理 JSON 数据类型

Find JSON Path Online

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

如何在 mysql 中处理 JSON 数据类型30

查看详情 如何在 mysql 中处理 JSON 数据类型

  • JSON_SET():设置指定路径的值,路径存在则更新,不存在则添加
  • JSON_REPLACE():仅替换已有路径的值,不新增
  • JSON_REMOVE():删除指定路径

示例:

UPDATE users SET profile = JSON_SET(profile, ‘$.age’, 30, ‘$.city’, ‘Shanghai‘) WHERE name = ‘Alice’;

这会将年龄改为 30,城市改为 Shanghai。

索引与 性能优化

不能直接对 JSON 字段创建索引,但可以通过生成列(Generated Column)提取字段并建立索引。

示例:

ALTER TABLE users ADD COLUMN city_index VARCHAR(50)
  GENERATED ALWAYS AS (profile->>’$.city’);
CREATE INDEX idx_city ON users(city_index);

这样就可以高效查询特定城市的用户:

SELECT * FROM users WHERE city_index = ‘Shanghai’;

基本上就这些。合理使用 JSON 类型能让结构更灵活,但要注意复杂查询可能影响性能,关键字段建议还是拆分到常规列中。

站长
版权声明:本站原创文章,由 站长 2025-10-30发表,共计1961字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources