不知道你的这个PK_ID是如何生成的,在oracle即使使用序列,如果不删除数据可以何证ID是连续的,但是当有数据删除时,序列就会断续,而且被删除的的ID值,序列是不会发现也不会回收使用的。
如果你是在应用程序中计算PK_ID,那么可以查到最大的ID值,然后加1,要考虑并发时ID重复问题,需要锁表,锁表影响数据库性能。
建议使用序列,序列的初始值等于现有最大值+1,每次自增1

解决方案 »

  1.   

    oracle在数据的存储时不是按照你插入的顺序依次写入文件的,即使你只做插入数据,也不一定按照顺序写入数据块的(你可以试验下,他创建一个简单表,然后ID定义为主键(主键默认是有索引的),然后插入一些数据,再查询,查询时不要加order by,你看到的顺序不一定是你插入的顺序)。
    数据是否排序,按什么来排序。是由你的select语句来控制的create sequence student_id
    2 minvalue 1  --最小值
    3 nomaxvalue  --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue
    4 maxvalue 999  -- 最大值
    5 start with 1   --从1开始计数,数值可变
    6 increment by 1  --每次加1,数值可变
    7 nocycle  --一直累加,不循环;cycle:达到最大值后,将从头开始累加
    8 nocache;  --不建缓冲区。   如果建立cache那么系统将自动读取cache值个seq,这样会加快运行速度;如果在单机中使用cache,或者oracle死了,那么下次读取的seq值将不连贯,所以不建议使用cache。