Добавьте первичный ключ автоматического увеличения к существующей таблице в oracle [дубликат]
этот вопрос уже есть ответ здесь:
как создать id с AUTO_INCREMENT на Oracle?
16 ответов
Я хочу добавить новый первичный столбец 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. Вы можете дважды щелкнуть имя столбца или нажать кнопку "Свойства".
появится диалоговое окно Свойства столбца.
выберите вкладку "Общие" (по умолчанию в первый раз). Затем установите флажки "автоматическое увеличение" и "столбец идентификаторов".
Шаг 3. - Дополнительная Информация
дополнительная информация, касающаяся авто инкремент можно задать, выбрав вкладку "автоинкремент".
- Начнем С
- Приращение
- Min Значение
- Максимальное Значение
- Отключить Кэш
- ордер
- Имя Последовательности
- Название Триггера
- Создать Триггер
обычно полезно упомянуть имя последовательности, чтобы оно было полезно в PL / SQL.
Нажмите кнопку ОК (применить) в диалоговом окне Свойства столбца.
Нажмите кнопку ОК (применить) в диалоговом окне Свойства таблицы.
таблица отображается в реляционной диаграмме.
Comments