我有这样一个需求:一个公司的某个记录信息在A表中只能存在一条记录。
假如公司用户a插入了一条记录。公司其他用户都不能再插入这条相同的记录在A表中了。
现在考虑一个问题:
假如用户a正要插入数据,该公司用户b不知道用户a在操作,也去插入数据
a和b同时进行,假设a和b同时点击提交 没有一丁点的时间差。也就是是a,b两个同时访问到save方法。
我的问题是:不考虑时间的差异。
a,b同时提交后,数据库会不会同时插入这2条记录。如果是同时,那么着两条记录的id都相同了?第二:要达到上面的需求的效果,我原本是在插入数据前查询是否有相同数据存在。如果存在就不在插入。
      但是这样考虑就出先了上面的那个问题。可能刚开始不存在,但是这个时候2个用户同时去插入。一下子就有了2条相同的记录。最后应该怎么解决?并发数据库多线程

解决方案 »

  1.   

    就是是有事务控制,那我是不是也该给方法枷锁呢。比如比如a,b现在都进到这个方法中了,数据库有事务,那么a去执行插入。b就等待。会不会有种情况就是a插入完成后。b就立马去插入了(因为b已经进入到这个方法中了只是在等待a执行完成,后b好执行?)
    也就是说我要实现上面的那种效果是不要只能有一个线程在访问我的这个方法这样就把b挡在方法外面了,a执行完成,b拿到锁,去执行,这个时候检查到数据库插入了一条了就不插入了......呵呵 
    求高见....
      

  2.   

    就是是有事务控制,那我是不是也该给方法枷锁呢。比如比如a,b现在都进到这个方法中了,数据库有事务,那么a去执行插入。b就等待。会不会有种情况就是a插入完成后。b就立马去插入了(因为b已经进入到这个方法中了只是在等待a执行完成,后b好执行?)
    也就是说我要实现上面的那种效果是不要只能有一个线程在访问我的这个方法这样就把b挡在方法外面了,a执行完成,b拿到锁,去执行,这个时候检查到数据库插入了一条了就不插入了......呵呵 
    求高见....
    高见真实不敢当啊汗死
    实现的办法有很多,我也就是偷懒把判断和插入过程放到一个事务中去。
    你说的是对的,通过同一个方法访问数据库还是给方法同步比较保险。
    如果a,b是两个客户端访问数据库,后面那个就得等咯