天地炫舞 2018-03-16 08:51 采纳率: 50%
浏览 2090
已结题

mysql5.7虚拟列无法设置默认值的吗?

今天使用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);

(感谢大家的回复)

  • 写回答

2条回答

  • threenewbee 2018-03-16 15:43
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog