JSON 类型优势
MySQL 5.7+ 支持原生 JSON 类型,可对 JSON 字段进行索引和高效查询,非常适合存储灵活的结构化数据。
创建与插入
CREATE TABLE user_ext (
id INT PRIMARY KEY,
info JSON
);
INSERT INTO user_ext VALUES (1, '{"name": "张三", "age": 30, "tags": ["vip", "developer"]}');查询 JSON 字段
-- 提取字段值
SELECT id, JSON_EXTRACT(info, '$.name') AS name FROM user_ext;
-- 简写:
SELECT id, info->'$.name' AS name FROM user_ext;
-- 提取数组元素
SELECT id, info->'$.tags[0]' FROM user_ext;
-- 条件查询(需要虚拟列或函数索引)
SELECT * FROM user_ext WHERE JSON_EXTRACT(info, '$.age') > 25;索引优化
MySQL 8.0 支持函数索引:
CREATE INDEX idx_age ON user_ext ((CAST(info->'$.age' AS UNSIGNED)));更新 JSON
-- 新增/修改字段
UPDATE user_ext SET info = JSON_SET(info, '$.city', '北京') WHERE id = 1;
-- 删除字段
UPDATE user_ext SET info = JSON_REMOVE(info, '$.age') WHERE id = 1;JSON 类型让关系型数据库也能灵活应对多变的需求。
