Дерби изменить существующий столбец пустой таблицы, чтобы быть идентичностью
Я пытаюсь следующее:
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
1 ответ
Решение
Вы не можете изменить столбец, чтобы переопределить его как идентификатор, вы должны создать его как столбец идентификатора с самого начала. Или вы можете удалить столбец, а затем повторно добавить его в качестве удостоверения.
Вот спецификация таблицы 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
]