H2 Db,ID NextVal

H2 Db, ID NextVal

我有一个序列:

CREATE SEQUENCE OWNER_SEQ START WITH 1;

我需要为 OWNER table 的 ID 列触发这个序列

CREATE TABLE METADATA.OWNER
(
    OWNER_ID           NUMBER  NEXTVAL(METADATA.OWNER_SEQ),
    OWNER_FIRSTNAME    VARCHAR2(100),
    OWNER_LASTNAME     VARCHAR2(100),
    CONSTRAINT OWNER_PK PRIMARY KEY (OWNER_ID)
);

我尝试了 NEXTVAL 的几个版本,但都出现错误

NUMBER数据类型是Oracle兼容的东西,根本不应该在H2中正常使用,尤其是对于主键,这种数据类型很慢。最好改用 BIGINTINTEGER


如果您不需要在多个表之间共享序列,通常您也不应该使用序列。您可以使用标识列:

OWNER_ID BIGINT GENERATED BY DEFAULT AS IDENTITY,

您也可以为标识列指定序列选项:

OWNER_ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
然而,

START WITH 1 不是很有用,因为默认情况下将使用此起始值。


但是如果你有真正的理由使用序列,你需要将它指定为一个DEFAULT值:

OWNER_ID BIGINT DEFAULT NEXT VALUE FOR METADATA.OWNER_SEQ,