Добавить первичный ключ автоматического прироста в существующую таблицу в 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.
Нажмите "ОК" ( "Применить" ) в диалоговом окне "Свойства столбца".
Нажмите "ОК" ( "Применить" ) в диалоговом окне "Свойства таблицы".
Таблица отображается в реляционной диаграмме.