我遇到了同样的问题,据我所知,没有办法为现有的 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。生成的 ALWAYS 和 AS DEFAULT 后面可以有两个关键字。always 表示不能手动输入,AS DEFAULT 表示它将是自动的,除非你指定一个数字。根据Apache 规范
通过 a 将数据复制到新表中INSERT
insert into contactsTemp (firstname, lastname, address , phone1 , phone2 )
SELECT firstname, lastname, address , phone1 , phone2 from contacts
现在删除原来的联系人表
DROP TABLE contacts
将contactsTemp重命名为contacts
RENAME TABLE contactstemp TO contacts