在 H2 数据库引擎中指定 UUID 类型的主键列的默认值?

Bas*_*que 1 uuid h2 primary-key create-table

这个SQL:

\n\n
CREATE TABLE product_ ( \n    pkey_ UUID PRIMARY KEY\n) ; \n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6成功创建表。

\n\n

但我希望新行默认为生成的 UUId,如本 AnswerRANDOM_UUID()所示。

\n\n
CREATE TABLE product_ ( \n    pkey_ UUID PRIMARY KEY DEFAULT RANDOM_UUID() \n) ; \n
Run Code Online (Sandbox Code Playgroud)\n\n

但这失败并出现错误:

\n\n
\n

org.h2.jdbc.JdbcSQLException: SQL 语句中的语法错误“CREATE TABLE PRODUCT_ (\n PKEY_ UUID PRIMARY KEY DEFAULT[*] RANDOM_UUID() \n ) ;”; 预期为“HASH、AUTO_INCRMENT、NOT、NULL、CHECK、REFERENCES、,、)”;SQL语句:

\n
\n\n

此错误的原因和解决方法是什么?

\n

Bas*_*que 5

参数排序

参数出现的顺序很重要。

正如您在Column Definition的文档中看到的,语法图表显示DEFAULT必须出现PRIMARY KEY. 交换这两个部件即可修复。

CREATE TABLE product_ ( 
    pkey_ UUID DEFAULT RANDOM_UUID() PRIMARY KEY 
) ; 
Run Code Online (Sandbox Code Playgroud)