我是这样创建的: 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;
-- 上面的N用下面的结果代替!
select max(id)+1 from book;
#3
下面那个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
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;
-- 上面的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
很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?
#11
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
#12
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?
#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;
-- 上面的N用下面的结果代替!
select max(id)+1 from book;
#3
下面那个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
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;
-- 上面的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
很感谢。我明白了。 我是担心,创建了这个start with 9的序列后,如果又删除了一些数据,表中剩4条数据了,那么此时如果用book_seq.nextval插入时,那id会是9而不是5啊,怎么可以让它自动判断最后一行,然后自增呢?
#11
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
#12
-- 既然你想的很多:表中剩哪4条数据呢?ID分别是什么呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?
-- 那你是不是每次在删除数据的同时,要去修改没有删除数据的ID,使之连续呢?
#13
了解了,看来是我想多了。没必要那样做。