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

ars*_*nal 2 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');
Run Code Online (Sandbox Code Playgroud)

假设我从这张表中删除了一条记录 -

delete from test where id='2';
Run Code Online (Sandbox Code Playgroud)

那么如果我选择查询 -

select * from test;
Run Code Online (Sandbox Code Playgroud)

然后我明白了

  ID  Name    
  1    Jon    
  3    Matt
  4    Bork
Run Code Online (Sandbox Code Playgroud)

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

ID  Name    
1    Jon    
2    Matt
3    Bork
Run Code Online (Sandbox Code Playgroud)

有什么建议我怎么能这样做..

phi*_*hil 5

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

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

还要记住,您正在更新(似乎是一个)主键列.

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