1

我正在使用 Netbeans,用 Java 编写并使用 Derby。

我在 APP 中有一个名为 PERSON 的表。在 PERSON 中,我有一个名为 PID 的列,具有以下属性:

Name: PID
Nulls allowed: [ ]
Data type: NUMERIC
Column size: 4
Decimal digits: 0
Position: 1
Part of a primary key: [/]
Part of an index: [/]

我使用元数据 isAutoIncrement 函数来检查它是否已经自动递增,但不是!

此后,我尝试使用以下 SQL 命令对其进行更改:

我相信这可能不适合德比:

ALTER TABLE APP.PERSON ALTER PID NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
(START WITH 1, INCREMENT BY 1); 

检查 Oracle 网站后,我发现了正确的语法:

ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 1;

我什至尝试了前导零:

ALTER TABLE APP.PERSON ALTER PID SET INCREMENT BY 0001;

这些都没有奏效,我在最后两个上得到的错误是:

ALTER TABLE '"APP"."PERSON"' specified attributes for column 'PID' that are 
not compatible with the existing column.

关于正确语法的任何想法?

4

2 回答 2

1

这是我通常会做的事情:

  1. 使用所需的架构创建一个新表,包括生成的主键
  2. 发出 INSERT INTO newtable SELECT columns FROM oldtable 以从旧表中填充新表的数据
  3. 将旧表重命名为某个临时名称,例如 table_soon_to_be_deleted
  4. 将新表重命名为所需的表名
  5. 做一些测试以确保我的行为符合预期
  6. 删除我在步骤 (4) 中重命名的旧表。
于 2013-02-13T21:47:36.473 回答
0

JavaDB 不允许使用生成的关键字更改列,因此我发现最好的方法是重新创建表并将主键指定为自动递增。例如;

create table staff(
   ID int primary key always generated as identity,
   name varchar(100)
);

这对我有用。

于 2022-01-28T06:46:03.283 回答