菜鸟求助:怎么给已有数据的表创建自增序列

时间:2021-04-25 12:23:21
   我创建了一个表BOOK,主键是ID,已经插入了8条数据,然后才想起来创建自增序列book_seq(以id自增).

   我是这样创建的: create sequence book_seq increment by 1。

   再insert:insert into book values(book_seq.netval,~,~,~)。

   报错:book_seq.nextval是2啊,和已有主键ID为2的冲突。

   怎么它能创建时实现在已有数据的表的基础上自增呢?

   
   先谢谢各位大侠了。

13 个解决方案

#1



create sequence book_seq start with  N increment by 1 cache 100 cycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;

#2


create sequence book_seq start with  N increment by 1 cache 100  nocycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;

#3


引用 2 楼 luoyoumou 的回复:
create sequence book_seq start with N increment by 1 cache 100 nocycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;


下面那个select语句怎么代替N呢,总是报错啊:

create sequence book_seq_id start with select max(id)+1 from book increment by 1 nocache nocycle;
 
ORA-01722: invalid number

#4


 select max(id)+1 from book 取到这个最大值,
然后修改序列的开始值

#5


引用楼主 lzhenglzheng 的回复:
我创建了一个表BOOK,主键是ID,已经插入了8条数据,然后才想起来创建自增序列book_seq(以id自增).

  我是这样创建的: create sequence book_seq increment by 1。

  再insert:insert into book values(book_seq.netval,~,~,~)。

  报错:book_seq.nextval是2啊……

create sequence book_seq start with 8 increment by 1 ;
让序列从9开始插入,前面8条记录不管
另外语句写的有问题
insert into book values(book_seq.ne xtval,~,~,~)。

#6


create sequence book_seq start with N increment by 1 cache 100 nocycle;

-- 上面的N用下面 查询的结果代替!
select max(id)+1 from book;

#7


-- 理解能力不是一般的差!

#8


create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue                         -- 表示序列没有最大值
nocycle;                                -- 表示不递增

#9


create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue                         -- 表示序列没有最大值
nocycle;                                -- 表示不循环!(可设置当序列到达最大值时是否循环,即:再从初始值开始取数)

#10


引用 9 楼 luoyoumou1202 的回复:
SQL code
create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                ……


很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?

#11


-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?

#12


-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?

#13


引用 12 楼 luoyoumou 的回复:
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?


了解了,看来是我想多了。没必要那样做。

#1



create sequence book_seq start with  N increment by 1 cache 100 cycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;

#2


create sequence book_seq start with  N increment by 1 cache 100  nocycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;

#3


引用 2 楼 luoyoumou 的回复:
create sequence book_seq start with N increment by 1 cache 100 nocycle;

-- 上面的N用下面的结果代替!
select max(id)+1 from book;


下面那个select语句怎么代替N呢,总是报错啊:

create sequence book_seq_id start with select max(id)+1 from book increment by 1 nocache nocycle;
 
ORA-01722: invalid number

#4


 select max(id)+1 from book 取到这个最大值,
然后修改序列的开始值

#5


引用楼主 lzhenglzheng 的回复:
我创建了一个表BOOK,主键是ID,已经插入了8条数据,然后才想起来创建自增序列book_seq(以id自增).

  我是这样创建的: create sequence book_seq increment by 1。

  再insert:insert into book values(book_seq.netval,~,~,~)。

  报错:book_seq.nextval是2啊……

create sequence book_seq start with 8 increment by 1 ;
让序列从9开始插入,前面8条记录不管
另外语句写的有问题
insert into book values(book_seq.ne xtval,~,~,~)。

#6


create sequence book_seq start with N increment by 1 cache 100 nocycle;

-- 上面的N用下面 查询的结果代替!
select max(id)+1 from book;

#7


-- 理解能力不是一般的差!

#8


create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue                         -- 表示序列没有最大值
nocycle;                                -- 表示不递增

#9


create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                            -- 表示每次从序列中cache 100个值打入内存(当业务非常繁忙时,提高性能)
nomaxvalue                         -- 表示序列没有最大值
nocycle;                                -- 表示不循环!(可设置当序列到达最大值时是否循环,即:再从初始值开始取数)

#10


引用 9 楼 luoyoumou1202 的回复:
SQL code
create sequence book_seq -- book_seq是序列名称
start with N                          -- N用大于等于1的整数值代替,是表示起始值
increment by 1                    -- 表示递增值为1,即序列值每取一个,递增1
cache 100                ……


很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?

#11


-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?

#12


-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?

#13


引用 12 楼 luoyoumou 的回复:
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?


了解了,看来是我想多了。没必要那样做。