Предпочтительный способ добавления суррогатного ключа в существующую таблицу БД Oracle

Мне нужно изменить существующую таблицу в базе данных Oracle 10g с несколькими тысячами записей, чтобы добавить суррогатный ключ автонумерации. Один из способов, который приходит мне на ум, это

  1. Create a new sequence
  2. Create the id column, allowing null values
  3. Updating the id column with the sequence
  4. Alter table to add "not null" and "primary key" for the new id column

Есть ли более простой или эффективный способ сделать это (или есть какая-то причина, по которой это не сработает)?


person simon    schedule 18.02.2010    source источник


Ответы (1)


Я бы сделал это следующим образом:

  1. Создайте столбец id, допускающий нулевые значения.

  2. Выполните этот запрос:

    UPDATE  mytable
    SET     id = rownum
    
  3. Изменить таблицу, чтобы добавить NOT NULL и PRIMARY KEY для нового столбца идентификатора

  4. Создайте последовательность, заполнив ее до MAX(id) + 1, и используйте ее для дальнейших вставок.

person Quassnoi    schedule 18.02.2010
comment
Привет, почему вы используете max (id) + 1, когда вы можете использовать последовательность? обновить набор mytable id=sequence.nextval - person Rene; 18.02.2010
comment
@Rene: всякий раз, когда в последовательности заканчиваются кэшированные значения, она обновляется, что создает запись в журнале повторов. Использование rownum намного быстрее. - person Quassnoi; 18.02.2010
comment
Quassnoi, я согласен с вашим подходом, если мы имеем дело с мегарядами, и я проголосовал за него. Но это кажется излишним для нескольких тысяч строк, как указано в первоначальном вопросе. Оба способа будут работать. - person Jim Hudson; 18.02.2010
comment
@Jim: конечно, они будут, хотя я вряд ли вижу здесь излишество :) - person Quassnoi; 18.02.2010