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
任何建议我该怎么做..
答案 0 :(得分:5)
如果我从Ask Tom网站上的文章中正确记得,序列并不能保证它会产生无间隙数字。因此,填充表格和生成ID的方式永远不会100%无差距(即使没有删除行)。
以下是关于该主题的文章之一:http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4343369880986
另请注意,您正在更新(似乎是)主键列。
我的建议是不要这样做。如果您需要一个有序的行列表,请使用ROW_NUMBER并将PK保留为代理键,而不附加任何“应用程序含义”。