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中正常使用,尤其是对于主键,这种数据类型很慢。最好改用 BIGINT
或 INTEGER
。
如果您不需要在多个表之间共享序列,通常您也不应该使用序列。您可以使用标识列:
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,
我有一个序列:
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中正常使用,尤其是对于主键,这种数据类型很慢。最好改用 BIGINT
或 INTEGER
。
如果您不需要在多个表之间共享序列,通常您也不应该使用序列。您可以使用标识列:
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,