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