在很多情况下,如果我们要往MySQL的表中添加数据,需要做判断是否有重复数据的操作。如果这次要添加的数据在之前就已经存在了,那这次就不会添加并告知调用方;如果不存在,那就添加。
今天要分享的就是利用MySQL添加唯一索引来实现上述功能。
首先,我们需要设置唯一索引:
如上表,我们需要给group_name这一列添加唯一索引,使之后再添加存在的group_name时会报重复信息。在这里我给大家展示如何使用Navicat来设置(网上大部分都是直接用命令,看大家习惯吧)
如上图,在Navicat的设计表中添加我们需要的索引即可,然后保存,唯一索引就建好了。
接下来就是验证唯一索引是否管用了,直接上代码:
Dao文件
// 增加团队
public int addGroup(Group group) {
int resultID;
try {
resultID = jdbcTemplate.update("insert into interface_groups(group_name, creator, status, create_Time) values(?,?,?,?)",
group.getGroupName(), group.getGroupCreator(), group.getGroupStatus(), DateUtil.timeStamp2Date(DateUtil.timeStamp(),"yyyy-MM-dd HH:mm:ss"));
} catch(DuplicateKeyException e){
resultID = 2;
} catch(Exception e){
resultID = 0;
}
return resultID;
}
Service文件
@Autowired
private GroupsDao groupsDao;
public int addGroup(Group group) {
return groupsDao.addGroup(group);
}
Controller文件
@PostMapping("/interface/group/{group_name}/{group_creator}")
public String addGroup(@PathVariable(value = "group_name") String group_name,
@PathVariable(value = "group_creator") String group_creator){
Group group = new Group(group_name, group_creator, 1);
int resultID = groupsService.addGroup(group);
JSONObject result = new JSONObject();
switch(resultID){
case 1:
result.put("result", true);
logger.info("Create group " + group_name + " from " + group_creator + " successfully!");
break;
case 2:
result.put("result", false);
result.put("reason", "插入团队重复!");
logger.info("Create group " + group_name + " from " + group_creator + " fail!");
break;
default:
result.put("result", false);
result.put("reason", "插入团队失败!");
logger.info("Create group " + group_name + " from " + group_creator + " fail!");
break;
}
return result.toJSONString();
}
上述代码大家只关心dao文件和controller文件即可,从controller请求结果就能验证唯一索引是否管用。我们用Postman请求下:
第一次请求:
第二次请求:
完美!