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

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

  1. Создать новую последовательность
  2. Создать столбец id, допускающий нулевые значения
  3. Обновление столбца id с последовательностью
  4. Измените таблицу, добавив "not null" и "primary key" для нового столбца id

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

1 Ответ

8 голосов
/ 18 февраля 2010

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

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

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

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

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

...