





















关键字: mysql ,json 类型,虚拟字段
CREATE TABLE user_profile (
id INT PRIMARY KEY AUTO_INCREMENT,
info JSON NOT NULL, -- 原始 JSON 字段
-- 从 JSON 中提取字符串字段(虚拟列)
username VARCHAR(50) GENERATED ALWAYS AS (info->>'$.username') VIRTUAL,
-- 从 JSON 中提取数值字段(存储列)
age INT GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(info, '$.age'))) STORED,
-- 基于 JSON 数组的计算字段
hobby_count INT GENERATED ALWAYS AS (JSON_LENGTH(info->>'$.hobbies')) VIRTUAL
);
-- 为虚拟字段创建普通索引
CREATE INDEX idx_username ON user_profile(username);
-- 为存储字段创建唯一索引
CREATE UNIQUE INDEX idx_age_unique ON user_profile(age);
INSERT INTO user_profile(info) VALUES
('{"username":"zhangsan", "age":25, "hobbies":["reading", "coding"]}'),
('{"username":"lisi", "age":30, "hobbies":["travel", "photography"]}')
-- 直接查询虚拟字段,无需手动解析 JSON
SELECT id, username, age, hobby_count FROM user_profile;
-- 结合虚拟字段进行条件查询
SELECT * FROM user_profile WHERE age > 28;
神奇吧, 用了好几年乐,都用上瘾了, 上面的例子,大模型生成
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。