2010-06-01 25 views
8

Trong PostgreSql, người ta có thể xác định chuỗi và sử dụng nó làm khóa chính của bảng. Trong HsqlDB, người ta vẫn có thể hoàn thành việc tạo ra một cột nhận dạng tự động gia tăng mà không liên kết với bất kỳ trình tự do người dùng định nghĩa nào. Có thể sử dụng trình tự do người dùng định nghĩa làm trình tạo của cột nhận dạng tự động gia tăng trong HsqlDB không?Liên kết chuỗi với danh tính trong hsqldb

mẫu sql trong 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 <> '') 
); 

tương đương trong HSQLDB là gì?

Cảm ơn.

Trả lời

13

Trong phiên bản 2.0, không có tính năng trực tiếp cho việc này. Bạn có thể định nghĩa một INSERT kích hoạt TRƯỚC trên bàn để làm điều này:

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; 

và chèn mà không sử dụng bất kỳ vlue cho id

INSERT INTO công ty giá trị null, 'test'

Cập nhật cho HSQLDB 2.1 và sau đó: Một tính năng đã được thêm vào để hỗ trợ điều này.

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

Xem Hướng dẫn dưới CREATE TABLE http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#dbc_table_creation

Bên cạnh đó, 2.1 và sau đó có một chế độ tương thích PostgreSQL, trong đó nó chấp nhận PostgreSQL CREATE TABLE tham chiếu chuỗi trong mệnh đề DEFAULT và chuyển nó thành Cú pháp HSQLDB.

Các vấn đề liên quan