Автоинкремент в Oracle (настройка идентификатора после удаления) - PullRequest
2 голосов
/ 26 октября 2011
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  Name    
1    Jon    
2    Matt
3    Bork

Любые предложения, как я могу это сделать ..

1 Ответ

5 голосов
/ 26 октября 2011

Если я правильно помню из статей на веб-сайте Ask Tom, последовательность НЕ гарантирует, что она будет производить числа без пробелов. Таким образом, способ заполнения таблицы и создания идентификаторов никогда не будет свободен на 100% (даже без удаления строк).

Вот одна из статей на эту тему: http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4343369880986

Также имейте в виду, что вы обновляете (как кажется,) столбец первичного ключа.

Мое предложение не делать этого. Если вам нужен упорядоченный список строк, используйте ROW_NUMBER и оставьте PK в качестве суррогатного ключа, не добавляя к нему никакого «значения приложения».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...