MySQL生成列应用

我有一张加密账户绑定表,其中有user_id,encrypt_account两个字段,分别表示用户id跟加密账户,某个用户跟某个加密账户绑定的时候会插入数据。

现在需要保证一个加密账户智能绑定一个用户。

很容易就想到给encrypt_account字段添加唯一索引。

但是表里还有个逻辑删除字段del,1表示已删除,0表示未删除,我只想要未删除的数据中encrypt_account唯一,而已删除的数据中encrypt_account是可以重复的。这样的话加唯一索引就没法满足了。

后来问了Ai,了解到MySQL支持生成列,生成列是一种特殊的列类型,它的值是基于其他列的值通过表达式计算得到的。

可以通过encrypt_account跟del两个字段生产一个新的字段unique_account,生成规则为当del为0时,unique_account=encrypt_account,del为其他值时,unique_account不变,也就是null。然后在unique_account上加唯一索引。这样就保证了当del为0时,encrypt_account是唯一的。

sql如下:

1.创建生成列

ALTER TABLE user_encrypt
ADD COLUMN unique_account VARCHAR(255) GENERATED ALWAYS AS (
    CASE WHEN del = 0 THEN encrypt_account ELSE NULL END
) STORED;

2.创建唯一索引

CREATE UNIQUE INDEX idx_unique_account ON user_enctypt (unique_account);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值