将主键字段添加到现有Derby表

时间:2011-02-14 13:41:09

标签: sql database primary-key derby javadb

我是SQL新手,但设法使用ij将我的CSV数据导入Apache Derby数据库。

我的表中没有主键,也没有适合的现有字段,所以我想创建一个新字段,生成唯一的数字来填充它,并将其设置为主键。我怎么能这样做?

例如,我试过

ALTER TABLE myTable ADD pk AUTO_INCREMENT PRIMARY KEY

但我在AUTO_INCREMENT上遇到语法错误。

此外,当我谷歌这类东西时,我发现了很多SQL提示,但其中很少似乎适用于德比。是否有我应该搜索的SQL的特定变体?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,据我所知,没有办法为现有的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。始终意味着它不能手动输入,AS DEFAULT意味着它将是自动的,除非您指定一个数字。根据{{​​3}}

通过INSERT

将数据复制到新表中
insert into contactsTemp (firstname, lastname, address , phone1 , phone2 ) 
SELECT firstname, lastname, address , phone1 , phone2 from contacts

现在删除原始联系人表

DROP TABLE contacts

将contactsTemp重命名为联系人

RENAME TABLE contactstemp TO contacts

答案 1 :(得分:1)

这已在Derby的问题跟踪器(Jira)中记录为DERBY-3888。对此问题进行评论和/或投票可能会增加在下一个版本中修复它的可能性......