尝试在 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.

我错过了什么?

  1. 您不能在列定义的中间指定列约束(UNIQUE 或任何其他),此类约束只能写在列定义的末尾:annotation_id integer DEFAULT NULL UNIQUE.

  2. DEFAULT NULL 是一个无意义的子句,如果没有指定其他值,所有可为空的列都将分配给 NULL 有或没有这个子句。该条款可以删除。仅当您想将其他一些值指定为默认值时才需要使用 DEFAULT 子句。