0

当我为 table 创建一个序列时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 开始的。我该如何解决这个问题?

4

1 回答 1

1

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

  • 序列生成唯一值。除非您将序列设置为CYCLE并且超出MAXVALUE(考虑到您发布的定义实际上不可能)或者您手动重置序列(例如,通过将序列设置INCREMENT BY为 -16,获取 a nextval,然后将INCREMENT BY返回设置为 1),否则它赢了永远不要产生1第二次的价值。id_article删除数据对将要生成的下一个数据没有影响。
  • 序列生成的列将有间隙。无论是因为序列缓存从共享池中老化还是因为事务回滚,并不是每个值都会最终出现在表中。如果您确实需要无间隙值,则不能使用序列。当然,这意味着您必须序列化INSERT操作,这将大大降低应用程序的可伸缩性。
于 2013-04-20T21:47:06.197 回答