创建时的 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 约束并且它自动递增。
使用时间戳作为主键被认为是一种不好的做法。很难确保唯一的约束,因为您可能有事件同时到达(某种程度上,这取决于您的时间分辨率)。加上整数更容易索引和查找。
如果我像这样在我的 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 约束并且它自动递增。
使用时间戳作为主键被认为是一种不好的做法。很难确保唯一的约束,因为您可能有事件同时到达(某种程度上,这取决于您的时间分辨率)。加上整数更容易索引和查找。