表中有一个字段需要用到递增(非主键且不想依赖数据库),能想到的就是用select max(field)来,可是这可能有并发问题,这个实现其实是论坛回复里的楼层。

解决方案 »

  1.   

    根据不同的数据库做处理。
    mysql自带自增的。oracle可以用sequence。sqlserver也有@@IDENTITY。
      

  2.   

    同步也想过,但是我的DAO并不是单例,每个线程都使用的是一个新对象,这样同步有效果吗?而且同步的话,感觉很影响效率吧。现在在想要不要直接写在sql里:insert into xxx values(...,select max(x) from xxx)
    不过这样好像还是有并发问题的可能,只是比写在程序里的概率低吧
      

  3.   

    N前大家的经典做法:
    另建一张表,用一个字段记录id,每当业务需要时,取出当前值,然后立刻update id+1。
    我理解你的做法,一般这样做的目的是想在更改主表数据之前生成一个从表的外键。
      

  4.   

    搞论坛的话,
    弄个jsprun来研究下
    基本啥都清楚了