首页 > 解决方案 > Derby 将空表的现有列更改为标识

问题描述

我正在尝试以下操作:

psAddPK = conn.prepareStatement("ALTER TABLE users ALTER usr    
                      GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)");        

psAddPK.execute(); 

但得到

java.sql.SQLSyntaxErrorException:语法错误:遇到“GENERATED”

在创建 usr 时定义为 NOT NULL

标签: javaderbyauto-incrementidentity

解决方案


您不能更改列以将其重新定义为身份,您必须从一开始就将其创建为身份列。或者您可以删除该列,然后将其重新添加为身份。

这是 Derby Alter 表规格

ALTER TABLE 语句允许您:

  • 向表中添加列
  • 向表中添加约束 从表中删除列
  • 从表中删除现有约束
  • 增加 VARCHAR 或 VARCHAR FOR BIT DATA 列的宽度
  • 覆盖表的行级锁定(或删除覆盖)
  • 更改标识列的增量值和起始值
  • 更改列的可空性约束
  • 更改列的默认值

句法:

ALTER TABLE table-name
{
    ADD COLUMN column-definition |
    ADD CONSTRAINT clause |
    DROP [ COLUMN ] column-name [ CASCADE | RESTRICT ]
    DROP { PRIMARY KEY | FOREIGN KEY constraint-name | UNIQUE 
     constraint-name | CHECK constraint-name | CONSTRAINT constraint-name }
    ALTER [ COLUMN ] column-alteration |
    LOCKSIZE { ROW | TABLE }
}

列改变

column-name SET DATA TYPE VARCHAR(integer) |
column-name SET DATA TYPE VARCHAR FOR BIT DATA(integer) |
column-name SET INCREMENT BY integer-constant |
column-name RESTART WITH integer-constant |
column-name [ NOT ] NULL |
column-name [ WITH | SET ] DEFAULT default-value |
column-name DROP DEFAULT

列定义

simple-column-name [ data-type ]
[ column-level-constraint ]*
[ [ WITH ] DEFAULT default-constant-expression
  | generation-clause
]

推荐阅读