繁体   English   中英

将序列与hsqldb中的标识链接

[英]Link a sequence with to an identity in hsqldb

在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中的等价物?

谢谢。

在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;

并且不使用id的任何vlue插入

INSERT INTO公司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语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM