场景:字段为空或者字段不为空时必须唯一
springBoot+mybatis—plus+mysql
一、在程序插入时用if else 判断
if(param!=null){
if(this.count(new QueryWrapper<T>("param",param))>0){
return "param已存在";
}else{
this.save(params);
....
}
}
但是这种方法如果多个参数都需要判断太麻烦了也不美观
二、在数据库中添加唯一约束
alter table 表名 add [constraint 约束名] unique(列名);
可是这种方式也添加了多个索引,过多的索引会不会影响速度呢?
出现问题
用了逻辑删除之后,被删除的数据依旧会参入到唯一的校验中这个很明显和需求不符了
解决
需要使用组合索引,把逻辑删除字符和那个需要唯一的约束放一起,且需要把逻辑删除字段的生效设置为null
/**
* 逻辑删除,0 - 未删除;-null - 已删除
*/
@TableLogic(value = "0", delval = "null")
总结
需要看索引的相关问题