Добавить поле первичного ключа в существующую таблицу Derby - PullRequest
1 голос
/ 14 февраля 2011

Я новичок в SQL, но мне удалось импортировать мои данные CSV в базу данных Apache Derby с использованием ij.

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

Например, я попытался

ALTER TABLE myTable ADD pk AUTO_INCREMENT PRIMARY KEY

, но у меня появилась синтаксическая ошибка AUTO_INCREMENT.

Кроме того, когда я Google для такого родаЯ нахожу множество советов по SQL, но некоторые из них, похоже, применимы к Derby.Есть ли конкретный вариант SQL, который я должен искать?

Ответы [ 2 ]

1 голос
/ 15 мая 2014

Это было зарегистрировано как DERBY-3888 в системе отслеживания проблем Дерби (Jira).Комментирование и / или голосование по этой проблеме может увеличить вероятность ее исправления в следующем выпуске ...

1 голос
/ 14 мая 2014

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

Вот метод, который я нашел, сработал лучше всего.


На основании исходной таблицы:

CREATE TABLE contacts (firstname varchar(50), lastname varchar(50), 
address varchar(50), phone1 varchar(14), phone2 varchar(14) );

Что выглядит как:

firstname     lastname           address        phone1          phone2
rich          bush               27 oak hill dr 11932035551234  11932035551234

Создайте новую таблицу с той же структурой, в дополнение к первичному ключу.

     CREATE TABLE contactsTemp 
 (primary_key INT not null GENERATED ALWAYS as identity, 
 firstname varchar(50), lastname varchar(50), 
 address varchar(50), phone1 varchar(14), phone2 varchar(14)) 

Разбиение поля primary_key. Первые два являются стандартными ключевыми словами SQL. Ключ будет целым числом и не может быть нулевым. Apache DB использует ключевое слово, сгенерированное как их AUTO_GENERATED. Есть два ключевых слова, которые могут следовать за сгенерированными ВСЕГДА и по умолчанию. Всегда означает, что он не может быть введен вручную, как ПО УМОЛЧАНИЮ означает, что это будет автоматически, если вы не укажете номер. Согласно спецификации Apache

Копирование данных в новую таблицу с помощью INSERT

insert into contactsTemp (firstname, lastname, address , phone1 , phone2 ) 
SELECT firstname, lastname, address , phone1 , phone2 from contacts

Теперь удалите исходную таблицу контактов

DROP TABLE contacts

Переименовать контактыТемп к контактам

RENAME TABLE contactstemp TO contacts
...