小编典典

将序列链接到hsqldb中的标识

sql

在PostgreSql中,可以定义一个序列并将其用作表的主键。在HsqlDB中,仍然可以完成创建一个自动递增的标识列,该列不链接到任何用户定义的序列。是否可以将用户定义的序列用作HsqlDB中自动递增标识列的生成器?

PostgreSql中的示例sql:

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中的等效项是什么?

谢谢。


阅读 225

收藏
2021-03-23

共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 <> '') );

请参见《创建表》下的《指南》http://hsqldb.org/doc/2.0/guide/databaseobjects-
chapt.html#dbc_table_creation

此外,2.1和更高版本具有PostgreSQL兼容模式,在该模式下,它接受PostgreSQL CREATE
TABLE语句,该语句引用DEFAULT子句中的序列并将其转换为HSQLDB语法。

2021-03-23