如果不一定要连续的,那么建议用sequence。用他来解决这些问题,包括你的并发!

解决方案 »

  1.   

    这个ID和其他字段组成联合主键,ID必须是从1开始的,还有其他用处,所以不能用序列,我只是想知道如何实现一个找到一个字段中的最大值然后+1的方法,好象有maxvalue这个函数?
      

  2.   

    找到了,用select nvl(max(id),0)+1 from abc where another_id=5就可以了。
    但max(id)是取符合条件记录总数,还是找这个字段中数值的最大值呢?
      

  3.   

    当然是最大值。不过不用seq不是自找麻烦
      

  4.   

    我说得详细些吧:
    id1和id2是abc表的联合主键,可预见的记录是:
    id1    id2
    10     1
    10     2
    10     3
    13     1
    14     2
    我需要的是上面这种情况,如果id2作为序列的话,那必须加一个字段来表示优先级顺序,我本想直接用id2来作为记录的顺序的。
    我这样的设计存在什么问题吗?请各位指教
      

  5.   

    用rownum呢?这是系统自带的,你插入一条记录rownum就自动加1了
      

  6.   

    这是分析函数的典型应用id1和id2都用序列,另外加一个列id3做主键id1和id2上都建索引,用分析函数显示
    id1    id2
    10     1
    10     2
    10     3
    13     1
    14     2或者分成主从表,id1作主表主键,id2作从表主键
      

  7.   

    可以考虑增加一个序号表
    create table seqno(
    no number);
    通过存储过程或SQL取得序号表的序号作为要插入的值,然后将该序号表序号加1。
      

  8.   

    我觉得如果要考虑并发问题的话,应该要进行锁!
    不过好在我的表的数据量非常小,绝对不会超过1000条记录,使用频率也不会很高。
    所以用select nvl(max(id),0)+1 from abc where another_id=5的方法自动增加1也可以。
      

  9.   

    我觉得如果要考虑并发问题的话,应该要进行锁!
    不过好在我的表的数据量非常小,绝对不会超过1000条记录,使用频率也不会很高。
    所以用select nvl(max(id),0)+1 from abc where another_id=5的方法自动增加1也可以。
      

  10.   

    这种问题当然用sequence了
    用max()+1肯定要加锁了
    这样并发性就很差了