Mysql唯一性索引的使用

使用

            后台首页公告管理,新添加一个首页公告时有对应的发布城市,一个城市可以有好多个首页公告,每个首页公告添加的时候都有对应的优先级,对应在app端被查询,通过这个cityCode码查询已开通的城市,再通过优先级确定首页公告的摆放在app端的位置

                              

问题

            在某个城市添加首页公告时除不能添加名称相同的首页公告外,还要不能添加已存在优先级的首页公告

解决

           开始笨点的解决办法是在每次新添加首页公告时查询出对应此发布城市的所有的首页公告,再一个个进行比较,或者直接把优先级和cityCode码传到Mybatis里直接拿到是否有此优先级的首页公告信息,后来在看其他同事的代码时,发现大佬直接用了cityCode和priority做唯一性索引,那么添加首页公告时就会自动检测是否存在了

           表中的唯一性索引

         

CREATE TABLE `notice` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(100) CHARACTER SET utf8mb4 NOT NULL COMMENT '公告标题',
  `provinceCode` int(11) NOT NULL COMMENT '省code, 2代表全国',
  `cityCode` int(11) NOT NULL COMMENT '城市code, 2代表全国',
  `cityName` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '省市名称',
  `noticeUrl` varchar(1024) CHARACTER SET utf8mb4 NOT NULL COMMENT '公告图片',
  `startTime` bigint(11) NOT NULL COMMENT '开始时间',
  `expireTime` bigint(11) NOT NULL COMMENT '失效时间',
  `noticeStatus` tinyint(2) DEFAULT '0' COMMENT '0:待生效 1:已上架 2:已下架',
  `showInterval` int(5) NOT NULL COMMENT '0:每次启动 1:12小时 2:24小时',
  `showPriority` int(6) NOT NULL COMMENT '1-100整数',
  `jumpMode` int(5) NOT NULL COMMENT '0:无跳转 1:跳转连接 ',
  `jumpUrl` varchar(1024) DEFAULT NULL COMMENT '跳转url',
  `gmtCreate` bigint(11) DEFAULT NULL COMMENT '创建时间',
  `gmtModified` bigint(11) DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `province_code_city_code_show_priority` (`provinceCode`,`cityCode`,`showPriority`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

代码中的判断

                   

                    

这个大佬很厉害,包括前端传过来的List类型的数据都会进行去重处理,参数的校验使用的是JSR303校验,使用@Valid注解,记录一下

                   

 实体信息

package com.wscar.xny.baseconfig.domain.req;

import com.wscar.xny.commons.utils.AbstractObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 公告添加Request对象
 * @author kimmy
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NoticeAddRequest extends AbstractObject {

    private Long id;

    /**
     * 公告标题
     */
    @NotBlank(message = "公告标题不能为空")
    private String title;

    @Valid
    @NotEmpty(message = "未选择城市信息")
    private List<Integer> cityRequests;

    /**
     * 公告图片
     */
    @NotNull(message = "未上传首页公告图片")
    private String noticeUrl;

    /**
     * 开始时间
     */
    @NotNull(message = "公告开始时间不能为空")
    private Long startTime;

    /**
     * 失效时间
     */
    @NotNull(message = "公告失效时间不能为空")
    private Long expireTime;

    /**
     * 0:每次启动 1:12小时 2:24小时
     */
    @NotNull(message = "未选择展示时间间隔")
    @Range(min = 0, max = 2, message = "展示时间间隔必须是一个大于等于0且小于等于2的正整数")
    private Integer showInterval;

    /**
     * 1-100整数
     */
    @NotNull(message = "未填写优先级")
    @Range(min = 1, max = 100, message = "优先级必须是一个大于等于1且小于等于100的正整数")
    private Integer showPriority;

    /**
     * 0:无跳转 1:跳转连接
     */
    @NotNull(message = "未选择跳转配置")
    @Range(min = 0, max = 1, message = "跳转配置必须是一个大于等于1且小于等于1的正整数")
    private Integer jumpMode;

    /**
     * 跳转url
     */
    private String jumpUrl;

    /**
     * 创建时间
     */
    private Long gmtCreate;

    /**
     * 修改时间
     */
    private Long gmtModified;
}

希望我学有所长吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值