2016-09-07 119 views
0

如果我创造我的H2数据库这样的新TABEL ...H2数据库主键上创建

CREATE TABLE MAININCOMER(timestamp TIMESTAMP, value REAL);

这意味着该ID将被隐藏,并自动递增,当我写TABEL , 对? - (据我所了解的教程和功能)

将一个主键自动分配给ID ?无论如何,在只有2列的表格类型中主键的重要性如何?还是应该按照最佳实践创建具有分配给时间戳的主键的表?

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

谢谢,亚历克斯

+0

“*表示该ID将被隐藏*” - 否。这意味着你的桌子不会有“ID”栏 - 甚至不是“隐藏的”栏。如果你想有一个名为'ID'的列,你需要定义它。 –

回答

0

号:你的表将不会有一个ID列,因为它不是在你的DDL CREATE TABLE上市。

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

但它是如此的比任何其他数据库:-D

请改变你的DDL这种全线短得多:

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

您可以测试它H2 web控制台里面是这样的:

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

这将插入1000条记录,您将看到该ID被定义为BIGINT(19) NOT NULL,将会分配一个PRIMARY KEY约束,并且它会自动检测很好地叮。

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

+0

好吧,让我们看看我想要实现的大局。我有一个环境调用DGLux5在这里我连接到一个电表,并在打开它时将数据记录到表中,它具有列行,时间戳和值。我需要将它们存储在数据库中,即H2。现在我的数据表和H2表不一定要相同才能传输数据吗?导致我的下一个问题,我如何从数据表中写入多个记录到数据库?使用INSERT INTO tbl_name VALUES(...,...),(...,...),(...,...),....,(...,...); ?在dglux脚本环境(JavaScript)中,我可以使用 – Lexus

+0

tableGetRows(@ parent.table),它给了我一个看起来像这样的结果[[0,“2016-09-08T07:03:00。184“,”50.16“],[1,”2016-09-08T07:05:00.340“,”50.17“]] - 我怎样才能删除行列?删除”围绕时间戳并替换('2016-09-08T07:03:00.184',50.16),('2016-09-08T07:05:00.340',50.17)将其与'并从值中移除'最终给我这个INSERT INTO tbl_name VALUES ; – Lexus

+0

你可以在不使用ID的情况下插入这些数据:它会为你创建id值如果你需要保留原始的行信息,我会建议插入mainincomer(original_row,timestamp,value)值(10, “2016-09-08T07:03:00.184”,“50.16”)''' –

0

尝试了这一点:

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

我并不需要id列,因为我将电表中的数据记录到具有2列时间戳和值的临时表中。如果我想写这个数据库表,我想这两个表需要是相同的。我是否需要分配给其中一列的主键? – Lexus

+0

如果你使用的是外键,那么使用主键或唯一键是强制性的@Lexus – dharan