尝试在 H2 数据库中使用 DEFAULT NULL 设置 UNIQUE 约束时出错
Error when trying to set a UNIQUE constraint with DEFAULT NULL in H2 database
我想创建一个 table 列,其中的列具有 UNIQUE 约束和 DEFAULT NULL,请参阅下面代码片段中的 annotation_id 列。这在 Postgres 中有效,但在 H2 中失败,但根据文档,它应该有效 (http://www.h2database.com/html/grammar.html#column_definition)。
这是 DDL 脚本:
CREATE TABLE highlights (
id bigserial PRIMARY KEY NOT NULL,
user_ref_id uuid,
body varchar(10000) DEFAULT NULL,
annotation_id integer UNIQUE DEFAULT NULL
);
这是我遇到的错误:
Syntax error in SQL statement "CREATE TABLE HIGHLIGHTS2 (
ID BIGSERIAL PRIMARY KEY NOT NULL,
USER_REF_ID UUID,
BODY VARCHAR(10000) DEFAULT NULL,
ANNOTATION_ID INTEGER UNIQUE DEFAULT[*] NULL
)"; expected "NOT, NULL, COMMENT, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE highlights2 (
id bigserial PRIMARY KEY NOT NULL,
user_ref_id uuid,
body varchar(10000) DEFAULT NULL,
annotation_id integer UNIQUE DEFAULT NULL
) [42001-200] 42001/42001
根据这里的线程,这应该是可能的:https://groups.google.com/g/h2-database/c/HrYKGMN2LPQ?pli=1
H2 already supports NULL in unique constraints.
我错过了什么?
您不能在列定义的中间指定列约束(UNIQUE
或任何其他),此类约束只能写在列定义的末尾:annotation_id integer DEFAULT NULL UNIQUE
.
DEFAULT NULL
是一个无意义的子句,如果没有指定其他值,所有可为空的列都将分配给 NULL
有或没有这个子句。该条款可以删除。仅当您想将其他一些值指定为默认值时才需要使用 DEFAULT
子句。
我想创建一个 table 列,其中的列具有 UNIQUE 约束和 DEFAULT NULL,请参阅下面代码片段中的 annotation_id 列。这在 Postgres 中有效,但在 H2 中失败,但根据文档,它应该有效 (http://www.h2database.com/html/grammar.html#column_definition)。
这是 DDL 脚本:
CREATE TABLE highlights (
id bigserial PRIMARY KEY NOT NULL,
user_ref_id uuid,
body varchar(10000) DEFAULT NULL,
annotation_id integer UNIQUE DEFAULT NULL
);
这是我遇到的错误:
Syntax error in SQL statement "CREATE TABLE HIGHLIGHTS2 (
ID BIGSERIAL PRIMARY KEY NOT NULL,
USER_REF_ID UUID,
BODY VARCHAR(10000) DEFAULT NULL,
ANNOTATION_ID INTEGER UNIQUE DEFAULT[*] NULL
)"; expected "NOT, NULL, COMMENT, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE highlights2 (
id bigserial PRIMARY KEY NOT NULL,
user_ref_id uuid,
body varchar(10000) DEFAULT NULL,
annotation_id integer UNIQUE DEFAULT NULL
) [42001-200] 42001/42001
根据这里的线程,这应该是可能的:https://groups.google.com/g/h2-database/c/HrYKGMN2LPQ?pli=1
H2 already supports NULL in unique constraints.
我错过了什么?
您不能在列定义的中间指定列约束(
UNIQUE
或任何其他),此类约束只能写在列定义的末尾:annotation_id integer DEFAULT NULL UNIQUE
.DEFAULT NULL
是一个无意义的子句,如果没有指定其他值,所有可为空的列都将分配给NULL
有或没有这个子句。该条款可以删除。仅当您想将其他一些值指定为默认值时才需要使用DEFAULT
子句。