Mysql的组合字段Generated Column

所谓组合字段(自创的名字,没有在网上找到通用的名字),是MySQL5.7加入的新功能,可以定义一个字段,值是其他字段值的组合。

官网中举了一个勾股定理的例子:

CREATE TABLE triangle (

 sidea DOUBLE,

 sideb DOUBLE,

 sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))

);

INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);

这个例子的意思是说sidec字段的值是sidea和sideb字段值的平方和再开方,在insert该表数据的时候可以不指定sidec的值,MySQL会自己计算。


这种组合字段有两种形式,Virtual Generated ColumnStored Generated Column,可以理解为虚拟组合列和存储组合列,Virtual Generated Column的数值不会存放在磁盘上,比较省空间,就是效率不高,如果需要查询建议加索引。

默认是Virtual Generated Column,如果要设置Stored Generated Column,需要在建表语句加上STORED关键字:

CREATE TABLE triangle (

 sidea DOUBLE,

 sideb DOUBLE,

 sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb) STORED)

);

字段设置为组合字段之后,如果数据库操作出现明显的逻辑错误,操作将被阻止,比如:

情况1:

把字段C设置为字段A除以字段B,然后试图insert一条字段A是1,字段B是0的数据,MySQL会提示错误。

情况2:

把字段C设置为字段A除以字段B,并把字段B设置为varchar类型。

建表可以成功。

insert一条字段A为1,字段B为2的数据,可以成功。

insert一条字段A为1,字段B为abc的数据,MySQL会提示错误。

以上可以看到,除非遇见MySQL实在解决不了的问题,多数数据库操作还是可以被允许的。

 

另外,因为Virtual Generated Column在磁盘上不保存数据,所以带来了一些使用上的特点,比如聚簇索引、全文索引、空间索引,都不能用,外键也不能用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值