当前位置: 首页 > 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);

http://www.dtcms.com/a/138960.html

相关文章:

  • 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创建分支操作指南
  • 【网工第6版】第3章 局域网①
  • Gparted重新分配swap空间之后,linux电脑读不到swap空间
  • 为什么要外参标定?
  • 网络编程 - 1
  • linux——iptables防火墙
  • 考研系列-计算机网络-第一章、计算机网络体系结构
  • OPAL:机器人学习中编码物理系统的因果理解
  • 如何自学机器学习?零基础到实战的完整路径
  • 如何对Flutter应用程序进行单元测试
  • 【软件工程大系】基于构件的软件工程(CBSE)