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

этот вопрос уже есть ответ здесь:

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

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

4 ответов


скажите, что ваш стол называется 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;

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

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;

сперла из форумы Oracle OTN

используйте alter table для добавления столбца, например:

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

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

Шаг 1. - Создать реляционную диаграмму

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

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

Шаг 2. - Редактировать Свойство столбца PK

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

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

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

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

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

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

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

нажмите OK (применить) в диалоговом окне Свойства столбца.

нажмите OK (применить) в диалоговом окне Свойства таблицы.

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