序列号无效

时间:2013-04-20 21:43:04

标签: sql oracle

当我为表article创建序列时,它从17开始而不是1

CREATE SEQUENCE seq_article START WITH 1 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER auto_article BEFORE insert ON article
FOR EACH ROW
BEGIN
  SELECT seq_article.NEXTVAL INTO :NEW.id_article FROM dual;
END;
/

我尝试删除所有行并创建其他数据,这次它是从19开始的。我该如何修复?

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题。

  • 序列生成唯一值。除非您将序列设置为CYCLE且超出MAXVALUE(根据您发布的定义不实际可行)或手动reset the sequence(例如,将INCREMENT BY设置为-16,获取nextval,然后将INCREMENT BY设置回1),它将不会再次生成1的值。删除数据不会影响将生成的下一个id_article
  • 序列生成的列将有间隙。无论是因为序列缓存老化了共享池还是因为事务被回滚,并不是每个值都会在表中结束。如果您确实需要无间隙值,则无法使用序列。当然,这意味着您必须序列化INSERT操作,这将大大降低应用程序的可伸缩性。