Oracle中的自动增量(删除后调整ID序列)

时间:2011-10-26 19:31:44

标签: sql oracle

CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));

CREATE SEQUENCE test1_sequence
START WITH 1
INCREMENT BY 1;

INSERT INTO test (id, name) VALUES (test1_sequence.nextval,'Jon');
INSERT INTO test (id, name) VALUES (test1_sequence.nextval,'Hello');
INSERT INTO test (id, name) VALUES (test1_sequence.nextval,'Matt');
INSERT INTO test (id, name) VALUES (test1_sequence.nextval,'Bork');

假如我从 -

中删除了此表中的一条记录
delete from test where id='2';

然后如果我选择查询 -

select * from test;

然后我得到

  ID  Name    
  1    Jon    
  3    Matt
  4    Bork

所以如果我需要维护id的顺序,就像我删除任何数据一样,它会自动调整id。所以我应该把这张桌子作为

ID  Name    
1    Jon    
2    Matt
3    Bork

任何建议我该怎么做..

1 个答案:

答案 0 :(得分:5)

如果我从Ask Tom网站上的文章中正确记得,序列并不能保证它会产生无间隙数字。因此,填充表格和生成ID的方式永远不会100%无差距(即使没有删除行)。

以下是关于该主题的文章之一:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4343369880986

另请注意,您正在更新(似乎是)主键列。

我的建议是不要这样做。如果您需要一个有序的行列表,请使用ROW_NUMBER并将PK保留为代理键,而不附加任何“应用程序含义”。

相关问题