欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 逻辑删除表结构如何加唯一索引?

逻辑删除表结构如何加唯一索引?

2025/5/2 5:29:32 来源:https://blog.csdn.net/weixin_42037525/article/details/147314567  浏览:    关键词:逻辑删除表结构如何加唯一索引?

在项目中经常碰到需要对表设置唯一索引,未逻辑删除的数据不允许重复,这种情况我们该如何正确的创建唯一索引?

如下表,需要给username字段添加唯一索引,已删除的数据可重复,该怎么设置唯一索引呢?

在MySQL中,比较两个NULL值时,你会得到一个NULL结果。这是因为NULL代表的是“未知”或“无值”的状态,而不是一个具体的值。因此,当你尝试比较两个NULL值时,你不能得到一个明确的“相等”或“不相等”的结论,因为它们都代表未知。 

唯一索引对null不起作用,字段为null的可以重复,利用这一点完美解决唯一索引和逻辑删除的冲突

我们可以新增一个username的虚拟字段,对虚拟字段创建索引

CREATE TABLE `ums_admin` (`id` bigint NOT NULL AUTO_INCREMENT,`username` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`password` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,`icon` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '头像',`email` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '邮箱',`mobile` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '手机',`nick_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '昵称',`note` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注',`create_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建时间',`login_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '登录时间',`status` int DEFAULT '0' COMMENT '帐号启用状态:0->未删除;1->已删除',PRIMARY KEY (`id`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=1633854642188767235 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='后台用户表';

第一步:新增一个虚拟字段,状态未删除是直接将username值填入,删除时设置为null

ALTER TABLE ums_admin 
ADD COLUMN unique_username VARCHAR(255) AS (CASE WHEN status = 1 THEN username ELSE NULL END
) VIRTUAL;

第二步:给虚拟字段创建唯一索引

ALTER TABLE ums_admin 
ADD UNIQUE INDEX idx_unique_username (unique_username);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词