MYSQL插入数据时检查字段值是否重复的方法详解

项目需求

现有一张u_ps的车位信息表,对应每个小区的车位id ps_id自增长,每个车位又对应车位编号num,车位id由自增长,车位编号可以根据自己小区情况手动添加设置,但是不能重复,车位编号不能重复。这就需要在新增车位信息的时候代码检验新增的该num在u_ps表中是否存在,存在则抛出异常,不存在则做插入操作。

问题关键

不同的小区community_id中车位num可以重复,如果分开设计表设置唯一约束是可行的,但是我们的需求是将所有的小区车位信息放在同一个表中,这就涉及到在插入一条数据的时候需要判断是否是同一小区id,在community_id相同的情况下num不能重复。

1、表分开时,对字段设置约束

我们的主键为车位id ps_id,我们的思路是当插入一条数据,先查询车位信息表,遍历新的数据中的num是否存在,或者说新增的num在表中是否为空,是则抛出异常,否则执行插入操作。 这是代码逻辑。

在sql中最直接的方法就是设置唯一索引(这跟主键并不冲突)

选中num

点击索引

这样就将num字段设置为唯一索引

在项目xml文件中设置插入语句

insert ignore into 语句是针对喊主键(唯一索引)字段的情况下做判断是否有重复的字段值,如果有则忽略本次操作抛出异常(try{}catch(){}),没有则执行插入操作。

2、所有操作在同一张表中

我们在不修改sql的情况下利用代码逻辑来实现

sql语句是最基本的插入语句:

代码逻辑:

解析代码:

new一个新的ps(车位信息类)bean对象,将我们插入的数据中的community_id和num放进listps对象中,对listps 执行sqlsession查询操作并放进list集合中,再对该查询结果集中的两个字段进行判空,如果为空说明该表中没有该字段的值,则进行插入操作,如果不为空则抛出异常并且在catch中再次抛出异常serviceexception e,这里设置两次catch,serviceexception e是为了返回给前端我们车位编号重复的异常,如果不设置的话前端只会收到异常信息。

stringutilmycc为我们设置的工具类,该类下的isempty方法为判空操作。

注意:判空时还需要保证传递的该字段的值不能为空,如果只判断表中数据是否为空的话最后的测试结果指挥报空指针!!!

这是我的工具类下的isempty方法:

 

注:框架改动、配置问题等不同无法做到同步,仅作为一个思路参考

总结

到此这篇关于mysql插入数据时检查字段值是否重复的文章就介绍到这了,更多相关mysql插入检查字段值重复内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐