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

Posted

技术标签:

【中文标题】在 H2 数据库引擎中为 UUID 类型的主键列指定默认值?【英文标题】:Specify a default value for a primary key column of type UUID in H2 Database Engine? 【发布时间】:2018-09-05 00:30:04 【问题描述】:

这个 SQL:

CREATE TABLE product_ ( 
    pkey_ UUID PRIMARY KEY
) ; 

...成功创建表。

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

CREATE TABLE product_ ( 
    pkey_ UUID PRIMARY KEY DEFAULT RANDOM_UUID() 
) ; 

但这失败并出现错误:

org.h2.jdbc.JdbcSQLException:SQL 语句“CREATE TABLE PRODUCT_ ( PKEY_UUID 主键默认[*] RANDOM_UUID() ) ; "; 预期 "HASH, AUTO_INCREMENT, NOT, NULL, CHECK, REFERENCES, ,, )"; SQL 语句:

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

【问题讨论】:

【参考方案1】:

参数排序

参数出现的顺序很重要。

正如您在Column Definition 的文档中所见,语法图表显示DEFAULT 必须出现在PRIMARY KEY 之前。交换这两个部分来修复。

CREATE TABLE product_ ( 
    pkey_ UUID DEFAULT RANDOM_UUID() PRIMARY KEY 
) ; 

【讨论】:

以上是关于在 H2 数据库引擎中为 UUID 类型的主键列指定默认值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL:向数据库表添加新的主键列

定义属性

19 01 18 dango 模型

Django框架:模型 定义属性

sQL数据库表的主键列设为标识,增量为1,下次插入数据时能不插入主键列吗

django 模型-----定义模型