For Example:建立一张用户表,同时也建立一个与之对应的序列,主要是用来获取用户id,现在在数据库初始化的时候我需要先初始化一些用户信息进去。insert into t_user(userid,...) values(1, ...)
/
insert into t_user(userid,...) values(2, ...)
/
insert into t_user(userid,...) values(3, ...)
/
...
commit
/而我的序列是从1开始
create sequence seq_user
increment by 1
start with 1
...
/疑问是,在我初始化用户信息的时候,是不是就应该用 seq_user.nexval() 的值代替1,2,3 ...如果不代替的话,那么我的序列是从1开始的,这样如果我在后台创建一个用户肯定会出问题的,主键重复啊!(主键为1的用户已经存在了)请教各位有数据库设计经验的大侠:这种情况你们都是如何处理的。
1.是直接用序列的值初始化数据?
2.还是序列的值不以1开始,而是看初始化了多少数据,以N+1开始?

解决方案 »

  1.   

    你的意思是说,如果我初始化5条记录,那么我的序列的nextval值就从6开始,是吗?
      

  2.   

    你可以在oracle看一下你的序列的属性有一个属性是current value属性这个属性表示当前这个序列的值,以后每调用一次nextval就会在current value的基础上加上step 的值。
      

  3.   


    好像不是的,由于你前面的五条数据都是自己手工做的,所以这里sequence的值还是没有变化哟,这里和mysql不一样,所以你如果是这样的话,需要修改sequence的start with的值,其实你这样的应用在一些系统里很常见,比如,我们系统里经常用sequence来实现主键不重复的问题,所以程序里都是通过娶到sequnece的nextval值以后再插入到数据库的,不过有时我们系统要自己做一些初始数据再里面,而初始数据可能需要指定固定的id,也就出现里这样的问题,我们以前都是把sequence的start with设置的大一些来解决,比如设置1000。这样里面小于1000的就是系统的数据了。