1

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

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

例如,我试过

ALTER TABLE myTable ADD pk AUTO_INCREMENT PRIMARY KEY

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

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

4

2 回答 2

1

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

于 2014-05-15T11:21:17.793 回答
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 后面可以有两个关键字。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
于 2014-05-14T14:33:01.960 回答