我是Oracle的初学者,现在知道,对于一个表,要想像SQL SERVER 那样有一个自动标识列的话,是要新建一个序列的但现在如果一个项目里有多个表,每个表都需要一个自动标识列的话,,如果这些表共用一个序列的话,估计肯定是不行了,现在想请教下,像我说的这种情况,是要为每一个表都建一个序列么?还是有其他什么办法?

解决方案 »

  1.   

    不需要为每个表建立序列了
    如果B表与A表有关联 insert B表是使用A的主键(序列生成的)就可以了 
      

  2.   


    没有关系的,oracle的序列值范围很大的。比如一个模块有一张主表吧,那么这个模块的所有表就用这一个序列来解决。你设计中有多少个模块,就可以相应建立多少个序列!
      

  3.   


    没有关系的,oracle的序列值范围很大的。比如一个模块有一张主表吧,那么这个模块的所有表就用这一个序列来解决。你设计中有多少个模块,就可以相应建立多少个序列!
      

  4.   

    你的意思是一个项目不管有几个表,都用一个序列,在增加的过程中,比如1增加到了A表的第一列,然后序列的下一个值2增加到了B表的第一列,3增加到了C表的第一列,这样用序列也是可以的,因为这么多表共用一个序列,肯定能保证每个表的每行自动标识列的值是不一样的,是么?
      

  5.   

    嗯 每个表的自动标识列都要从1开始,递增量为1  这是肯定的
    你没明白我的意思
    是这样的 insert into B(id) select max(id) from A;
      

  6.   

    A的id通过序列生成 B的id不再需要序列 从A表取最大的就ok了
    这种情况 要保证在业务上  A与B是一对一的
      

  7.   

    强调一点在数据库设计中 所有的表的主键都是从1开始的 而且递增值也是1 
    好 现在开始给你分解 
    A表:id列(主键)  其它列先不考虑
    B表:id列(主键)开始的业务 现在对A表插入一条数据
    insert into A valuse(1);  1通过序列得到
    这时业务上也要求对B表插入
    insert into b select max(id) from a;--也是1
      

  8.   

    没关系的 
    max(id)你要看明白  就明白了
      

  9.   

    哦,我明白你的意思了,就是说,当对A表插入数据的时候,同时也要对B表插入一条数据,这时,A表和B表就可以同时使用一个序列。但如果一个项目中,有很多表,这些表可能有些并没有关联关系,这时他们就要分别用不同的序列是吧?
      

  10.   

    在oracle下触发器实现主键自增
    可以参考我的BLOG:http://blog.csdn.net/java3344520/archive/2009/11/30/4907591.aspx