今天使用mysql5.7.11,想对json的操作进行测试。我首先创建了一个带有json类型的表,然后对json中的某个key建立虚拟列,然后对这个虚拟列创建索引(学习网址:http://blog.csdn.net/wuzuodingfeng/article/details/53693209)。
最后我突然发现了一个问题,如何某个json中没有这个key,那么创建的索引对应的值就是NULL,这会破坏索引的效率啊。于是我想当这个key不存在的时候,给一个默认值,例如int时为0,varchar时为“”,可是我给这个虚拟列设置默认值时,一直报错,我的代码如下:
- - 我的json串如下(json串对应的列名叫model):
[{"_id": "e030c0e8-e99a-405d-999e-71e6e0dc4f2f", "name": "优秀", "model_id": "bb3cd414-5aaa-4f5a-bf93-1c8953dc0bea", "end_score": 100, "begin_score": 439057}, {"_id": "dd59da28-f50b-4184-9589-c1fa6f7a414e", "name": "合格", "model_id": "bb3cd414-5aaa-4f5a-bf93-1c8953dc0bea", "end_score": 89}]
-- 创建虚拟列的sql
ALTER TABLE qc_model ADD begin_sore_virtual int (4) DEFAULT 0 GENERATED ALWAYS AS (json_extract(model, '$[0]."begin_score"')) VIRTUAL;
-- 创建索引的sql
ALTER TABLE qc_model INDEX begin_sore_index(begin_sore_virtual);
(感谢大家的回复)