2010-06-01 36 views
8

在PostgreSql中,可以定義一個序列並將其用作表的主鍵。在HsqlDB中,仍然可以完成創建不鏈接到任何用戶定義序列的自動增量標識列。是否可以使用用戶定義的序列作爲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等價?

謝謝。

回答

13

在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公司插入值零, '測試'

更新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創建引用DEFAULT子句中的序列,並將其轉換爲TABLE語句PostgreSQL的兼容模式HSQLDB語法。