Свяжите последовательность с к идентификационным данным в hsqldb

В PostgreSql можно определить последовательность и использовать его в качестве первичного ключа таблицы. В HsqlDB можно все еще выполнить создание автоинкрементного столбца идентификационных данных, который не связывается ни с какой определяемой пользователем последовательностью. Действительно ли возможно использовать определяемую пользователем последовательность в качестве генератора автоинкрементного столбца идентификационных данных в HsqlDB?

Образец sql в PostgreSql:

CREATE SEQUENCE seq_company_id START WITH 1;

CREATE TABLE company (
  id bigint PRIMARY KEY DEFAULT nextval('seq_company_id'),
  name varchar(128) NOT NULL CHECK (name <> '')
);

Каков эквивалент в HsqlDB?

Спасибо.

9
задан Lukas Eder 14 November 2014 в 09:38
поделиться

1 ответ

В версии 2.0 нет прямой возможности для этого. Вы можете определить триггер BEFORE INSERT на таблице, чтобы сделать это:

CREATE TABLE company ( id bigint PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '') );

CREATE TRIGGER trigg BEFORE INSERT
ON company REFERENCING NEW ROW AS newrow 
FOR EACH ROW
SET newrow.id = NEXT VALUE FOR seq_company_id;

и вставить без использования vlue для id

INSERT INTO company VALUES null, 'test'

Обновление для HSQLDB 2.1 и более поздних версий: Для поддержки этого была добавлена функция.

CREATE SEQUENCE SEQU
CREATE TABLE company ( id bigint GENERATED BY DEFAULT AS SEQUENCE SEQU PRIMARY KEY, name varchar(128) NOT NULL CHECK (name <> '') );

См. руководство в разделе CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

Кроме того, 2.1 и более поздние версии имеют режим совместимости с PostgreSQL, в котором они принимают оператор PostgreSQL CREATE TABLE, ссылающийся на последовательность в предложении DEFAULT, и переводят его в синтаксис HSQLDB.

15
ответ дан 4 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: