在Postgresql中,可以定义一个序列并将其用作表的主键.在HsqlDB中,仍然可以完成创建自动增量标识列,该列不链接到任何用户定义的序列.是否可以使用用户定义的序列作为HsqlDB中自动增量标识列的生成器?
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;
插入时不使用任何vlue的id
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表http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation下的指南
此外,2.1及更高版本具有Postgresql兼容模式,其中它接受Postgresql CREATE TABLE语句,该语句引用DEFAULT子句中的序列并将其转换为HsqlDB语法.