最近工作中使用了Mysql的JSON字段,对相关知识点做一个简单的记录。
MyBatis-JSON字段
Mysql中的JSON字段
MySQL在2015年中期发布了MySQL 5.7.8,为我们提供了JSON数据类型。从那时起,它一直被用作逃避严格的列定义并存储所有形状和大小的JSON文档的一种方式:审核日志,配置设置,第三方有效负载,用户定义的字段等。
-- auto-generated definition
create table sys_json
(
id int auto_increment primary key,
json json not null,
del_flag char default '1' not null comment '删除标记:0已删除 1未删除'
);
INSERT INTO sys_json (id, json, del_flag) VALUES (1, '{"after": "外呼策略:测试;优先级:7;", "before": "外呼策略:test030801;优先级:5;"}', '1');
INSERT INTO sys_json (id, json, del_flag) VALUES (2, '{"id": 142, "name": "wql", "label": "李四的家人"}', '1');
INSERT INTO sys_json (id, json, del_flag) VALUES (3, '{"id": 3000, "name": "wql", "birthday": "2023-08-08"}', '1');
编制索引
若json字符串非数组时,可以通过$.字段名
来表示查询对应的value
SELECT json->>"$.id" FROM sys_json;
SELECT JSON_UNQUOTE(JSON_EXTRACT(json, "$.id")) FROM sys_json;
编制列
ALTER TABLE sys_json ADD COLUMN json_id VARCHAR(255) GENERATED ALWAYS as (json->>"$.id");
查询
SELECT json_id FROM sys_json;
现在我们已经准备好了生成的列,我们可以像添加任何其他列一样向其添加索引。
ALTER TABLE sys_json ADD INDEX json_id (json_id) USING BTREE;
我们在 json_id上定义了一个索引,它是一个基于表达式json->>"$.id"
生成的列。我们已经证明,当我们对 json_id列进行查询时,会使用索引。更有趣的是,优化程序足够聪明,如果我们忘记对命名 email 列进行查询,它依然可以帮助我们!
功能索引
引用