delete_time联合唯一索引不生效

delete_time联合唯一索引不生效

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

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



正在回答 回答被采纳积分+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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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