У меня была такая же проблема, и, насколько я могу судить, нет способа создать новый первичный ключ для существующей базы данных 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