Добавить первичный ключ автоматического прироста в существующую таблицу в oracle

Я хочу добавить новый первичный столбец автоматического увеличения в существующую таблицу с данными. Как это сделать?

Сначала я добавил столбец, а затем попытаюсь добавить последовательность после этого, я потерял способ вставки и сделать этот столбец в качестве первичного ключа.

Ответ 1

Скажите, что ваша таблица называется t1, а ваш первичный ключ называется id
Сначала создайте последовательность:

create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

Затем создайте триггер, который увеличивается при вставке:

create trigger t1_trigger
before insert on t1
for each row
   begin
     select t1_seq.nextval into :new.id from dual;
   end;

Ответ 2

Если у вас есть столбец и последовательность, сначала нужно заполнить новый ключ для всех существующих строк. Предполагая, что вам все равно, какой ключ назначен какой строке

UPDATE table_name
   SET new_pk_column = sequence_name.nextval;

После этого вы можете создать ограничение первичного ключа (это предполагает, что либо нет существующего ограничения первичного ключа, либо вы уже сбросили существующее ограничение первичного ключа)

ALTER TABLE table_name
  ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )

Если вы хотите сгенерировать ключ автоматически, вам нужно добавить триггер

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.new_pk_column := sequence_name.nextval;
END;

Если вы используете более старую версию Oracle, синтаксис немного более громоздкий

CREATE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  SELECT sequence_name.nextval
    INTO :new.new_pk_column
    FROM dual;
END;

Ответ 3

Отключен от Oracle OTN forums

Используйте таблицу изменений, чтобы добавить столбец, например:

alter table tableName add(columnName NUMBER);

Затем создайте последовательность:

CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;

и использовать update для вставки значений в столбец, как этот

UPDATE tableName SET columnName = seq_test_id.NEXTVAL

Ответ 4

Вы можете использовать Oracle Data Modeler, чтобы создавать автоматически увеличивающиеся суррогатные ключи.

Шаг 1. - Создание реляционной диаграммы

Вы можете сначала создать логическую диаграмму и инженер для создания реляционной диаграммы, или вы можете сразу создать реляционную диаграмму.

Добавьте сущность (таблица), для которой требуется автоматическое увеличение PK, выберите тип PK как целое.

Шаг 2. - Изменить свойство столбца PK

Получить свойства столбца PK. Вы можете дважды щелкнуть имя столбца или нажать кнопку "Свойства".

Появится диалоговое окно "Свойства столбца".

Выберите вкладку "Общие" (выбор по умолчанию в первый раз). Затем установите флажки "Auto Increment" и "Identity Column".

Шаг 3. - Дополнительная информация

Дополнительная информация, касающаяся автоматического приращения, может быть указана путем выбора вкладки "Автоматическое увеличение".

  • Начать с
  • Приращение
  • Минимальное значение
  • Максимальное значение
  • Цикл
  • Отключить кеш
  • Заказ
  • Имя последовательности
  • Имя триггера
  • Создать триггер

Обычно рекомендуется указывать имя последовательности, так что это будет полезно в PL/SQL.

Нажмите "ОК" ( "Применить" ) в диалоговом окне "Свойства столбца".

Нажмите "ОК" ( "Применить" ) в диалоговом окне "Свойства таблицы".

Таблица отображается в реляционной диаграмме.