MySQL如何利用虚拟字段创建按条件约束

做MySQL数据表设计的时候有时候会遇到需要建立按条件唯一索引的情况,举个例子:

销售表sale是记录goods 的销售记录的,sale表 有goods_id和status 2个字段,status=1正常 =2表示作废,每个goods_id对应 status=1的记录只能有一条,对应status=2的记录可以有多条,为了防止重复写入销售正常的销售记录数据,就要建立一个唯一索引,如果是mysql8.0或以上版本那好说,直接用一下语句实现:

CREATE UNIQUE INDEX idx_goods_status ON sale(goods_id) WHERE status = 1;

那如果是mysql5.7呢,就得利用虚拟字段来做了,具体如下

第一步:先新建一个虚拟字段status_flag

ALTERTABLEsaleADDCOLUMNstatus_flagVARCHAR(100)GENERATEDALWAYSAS(IF(status=1,goods_id,NULL))STORED;

第二步:给字段status_flag建立索引

CREATE UNIQUE INDEX idx_goods_status ON tbl_sale(status_flag);

这就完美解决了约束问题了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容