如何仅将序列增加1?

Ber*_*ard 1 sql oracle oracle11g

首先,我使用jdbc驱动程序在java中运行所有这些...

在这里我定义一个表:

create table HistoryCCP(
  ID     NUMBER(6)      NOT NULL,
  SCRIPT VARCHAR2(1000) NOT NULL
 )
Run Code Online (Sandbox Code Playgroud)

在这里我定义一个序列:

CREATE SEQUENCE SYSTEM.HistoryId  
   MINVALUE  1 
   MAXVALUE 1000000 
   INCREMENT BY 1 
   START WITH 1  
   NOORDER   
   NOCYCLE
Run Code Online (Sandbox Code Playgroud)

现在我在这里使用这个插入表:

insert into HistoryCCP 
  values (SYSTEM.HistoryId.nextval ,'HELLOOOO  ')
Run Code Online (Sandbox Code Playgroud)

每当我关闭程序并再次运行并尝试插入时,它会将其递增10!当我定义这样的序列时:

CREATE SEQUENCE SYSTEM.HistoryId  
   MINVALUE  1 
   MAXVALUE 1000000 
   INCREMENT BY 1 
   START WITH 1
   CACHE 100       -- added cache parameter
   NOORDER   
   NOCYCLE
Run Code Online (Sandbox Code Playgroud)

它增加了100!你知道它为什么会这样,以及如何将它增加1?

Dav*_*dge 6

永远不要依赖序列进行无间隙编号.

缓存值是数据库服务器在内存中保存的序列值的数量,以避免使用最近使用的值继续更新其内部$ SEQ表.如果减小缓存值,则会增加必须修改$ SEQ表的速率,这会降低系统的速度.

缓存的值可以老化,并在系统重新启动时丢失,并且如果事务回滚,则不会重用值.

间隙的存在对您来说不应该是一个问题 - 如果是,那么您将需要使用序列之外的其他内容来生成数字,这样做会将插入序列化到该表.