delete_time联合唯一索引不生效

delete_time联合唯一索引不生效

使用delete_time作为逻辑删除字段,默认为null值,经测试null值建立的唯一索引是不生效的,如下面的建表语句,仍然可以插入相同username的数据

​CREATE TABLE lin_user
(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
username varchar(24) NOT NULL COMMENT '用户名,唯一',
nickname varchar(24) DEFAULT NULL COMMENT '用户昵称',
avatar varchar(500) DEFAULT NULL COMMENT '头像url',
email varchar(100) DEFAULT NULL COMMENT '邮箱',
create_time datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
delete_time datetime(3) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY username_del (username, delete_time),
UNIQUE KEY email_del (email, delete_time)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
网络连接已断开 2021-04-27 23:59:44

唯一索引是允许有空值的


  • 提问者 luckystar728 #1

    是允许有空值,但是这样不就不唯一了吗

    2021-04-28 00:01:44
  • 网络连接已断开 回复 提问者 luckystar728 #2

    这里直接在 username 和 email 设置唯一索引即可。

    2021-04-28 00:03:41
  • 提问者 luckystar728 回复 网络连接已断开 #3

    嗯,只能是这样了,不过软删除某个数据后,再插入相同的username就会报错了,只能更新原来的数据将delete_time再设置为null。

    2021-04-28 00:07:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师