当前位置: 首页 > news >正文

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

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

如下表,需要给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);

相关文章:

  • Obsidian的简单使用
  • 【Semantic Kernel核心组件】Kernel:掌控AI编排的“中央处理器“
  • Java基础知识面试题(已整理Java面试宝典pdf版)
  • AbMole—如何高效诱导巨噬细胞的极化?
  • 04-libVLC的视频播放器:获取媒体信息
  • 《手环表带保养全攻略:材质、清洁与化学品避坑指南》
  • 力扣349 == 两个数组交集的两种解法
  • 第十五届蓝桥杯青少Python省赛中级组真题 ——浇花系统
  • Java命名规则
  • 01、单片机简介
  • photo-sphere-viewer 4.8.1在vue中使用
  • Vim使用完全指南:从基础到高效编辑
  • 了解高速设计的信号完整性仿真
  • 计算机视觉算法实战——基于YOLOv8的农田智能虫情测报灯害虫种类识别系统开发指南
  • C++的基本的输入输出流学习
  • 【CODESYS学习笔记001】MODBUS-TCP 与 标准TCP通信的优缺点对比
  • Diffusion Models for Imperceptible and TransferableAdversarial Attack--阅读笔记
  • 国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)
  • Java面试(2025)—— Spring
  • Git创建分支操作指南
  • 深圳中院回应“退休夫妻月入1.2万负债1.2亿”:其自述因经营不善负债
  • 法治课|争议中的“行人安全距离”于法无据,考量“注意义务”才更合理
  • 刘国中:持续加强护士队伍建设,更好保障人民身体健康
  • 俄乌释放停火和谈信号,克宫:将组建“相应级别”谈判代表团
  • 阶跃星辰CEO姜大昕:追求智能上限仍是最重要的事,多模态的“GPT-4时刻”尚未到来
  • “行人相撞案”现场视频公布,法院:表述不当造成误导