创建时的 H2 数据库主键

H2 Database Primary Key on Create

如果我像这样在我的 h2 数据库中创建一个新表...

CREATE TABLE MAININCOMER(timestamp TIMESTAMP, value REAL);

意思是我写入表格时ID会被隐藏并自动递增,对吧? -(据我从教程和功能中学到的)

主键是否会自动分配给 id?在只有 2 列的 table 类型中,主键有多重要?或者我应该作为最佳实践创建主键分配给时间戳的 table 吗?

CREATE TABLE MAININCOMER(timestamp TIMESTAMP PRIMARY KEY, value REAL);

谢谢,亚历克斯

试试这个:

create table mainincomer(id bigint auto_increment,t timestamp,value real,primary key(id))

否: 您的 table 将没有 ID 列,因为它未在您的 DDL CREATE TABLE.[=16 中列出=]

我知道添加这种自动递增列用作主键的最简单方法是 ID IDENTITY。小心,因为它特定于 H2 而不是 portable.

但它比任何其他数据库都要短得多:-D

请将您的 DDL 更改为此完整行:

CREATE TABLE MAININCOMER(id IDENTITY, timestamp TIMESTAMP, value REAL);

您可以像这样在 H2 网络控制台中测试它:

@loop 1000 insert into mainincomer (timestamp) values (now());

这将插入 1000 条记录,您会看到 ID 被定义为 BIGINT(19) NOT NULL,将为其分配一个 PRIMARY KEY 约束并且它自动递增。

使用时间戳作为主键被认为是一种不好的做法。很难确保唯一的约束,因为您可能有事件同时到达(某种程度上,这取决于您的时间分辨率)。加上整数更容易索引和查找。