当前位置:Gxlcms > 数据库问题 > mysql5.7+ 虚拟列,json使用初体验

mysql5.7+ 虚拟列,json使用初体验

时间:2021-07-01 10:21:17 帮助过:22人阅读

TABLE use_info ( uid INT(11) NOT NULL AUTO_INCREMENT, uname VARCHAR(20) NOT NULL DEFAULT ‘‘, other_info json, PRIMARY KEY(uid) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

 

2. 写入数据

## 两种写入json数据方式
INSERT
INTO user_info (uname,other_info) VALUES (first user,JSON_OBJECT("age",22,"real_name","Wayne","sex","男")); INSERT INTO user_info (uname,other_info) VALUES (second user,{"age":21, "real_name":"Jone", "sex":"女", "height":170, "weight":48});

 数据如图:

技术分享图片

 

4.增加虚拟列 v_age(养成加前缀的好习惯, 例如这里使用"v_"来标记该字段是一个虚拟字段,在团队开发时,共同遵守一个约定, 相互配合起来会非常顺利)

##默认是Virtual Column,虚拟列不持久化
ALTER
TABLE user_info ADD COLUMN v_age TINYINT(3) UNSIGNED GENERATED ALWAYS AS (other_info->$.age);

更新以后的表结构如下:

技术分享图片

 

5. 查看更新后的数据

可以看到v_age已自动提取了other_info中的age字段

技术分享图片

更新一下记录,把id=1的age更新为24

UPDATE user_info SET other_info=json_set(info,$.age,24) WHERE uid=1

再来看下数据,对应的v_age也更新为24,是不是有点像视图的感觉,哈哈

技术分享图片

 

这里注意一下,insert时不要给虚拟列设定值, 否则会报错(这里就体现出了加前缀的好处,不管是别人还是自己,看到v_前缀就会意识到这是一个虚拟列,就不至于写出类似的错误语句了

技术分享图片

 

6. 关于索引,json字段无法对其中一个值使用索引,而虚拟列是支持索引的, 可以利用这一特性来索引json字段的某个值

#创建索引
ALTER TABLE user_info ADD INDEX v_age(v_age);

 使用explain来查看一下v_age索引的使用情况,可以看到使用的索引的为v_age

 技术分享图片

 

 

好了,体验到此结束,如有错误欢迎指正

原创文章,转载请注明出处

mysql5.7+ 虚拟列,json使用初体验

标签:charset   arc   column   value   原创   nod   空间   style   优势   

人气教程排行