加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

将序列与hsqldb中的标识链接

发布时间:2020-12-12 06:28:36 所属栏目:MsSql教程 来源:网络整理
导读:在PostgreSql中,可以定义一个序列并将其用作表的主键.在HsqlDB中,仍然可以完成创建自动增量标识列,该列不链接到任何用户定义的序列.是否可以使用用户定义的序列作为HsqlDB中自动增量标识列的生成器? PostgreSql中的示例sql: CREATE SEQUENCE seq_company_id
在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;

插入时不使用任何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语法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读