简短的回答:你的表的主键必须是BIGINT类型:
CREATE TABLE hydr(dt bigint primary key, value double, sensorid int);
在这种情况下,该表的组织使用“DT”一栏。这被称为“聚集索引”。数据类型TIMESTAMP不受支持,主要是因为它也包含纳秒。你可以做的是将unix时间戳(自1970年以来的毫秒)存储为BIGINT。
长答案:数据如何存储在H2中的文档很差。我将在H2数据库的“性能”文档中添加以下部分。我希望这将清除的东西(如果不是,请告诉我):
数据如何存储在内部
对于持久性的数据库,如果表与类型BIGINT,INT的一列主键生成,SMALLINT,TINYINT,那么表格的数据就是这样组织的。这有时也称为“聚集索引”或“索引组织表”。
H2内部以b树的形式存储表数据和索引。每个b-tree将条目存储为唯一键(一个或多个列)和数据(零个或多个列)的列表。表格数据总是以“数据b-tree”的形式组织成一个long类型的单个列键。如果在创建表时指定了BIGINT,INT,SMALLINT,TINYINT类型的单列主键,则此列将用作数据B树的键。如果没有指定主键,如果主键列是另一种数据类型,或者如果主键包含多个列,那么会在表中添加一个类型为BIGINT的隐藏自动增量列,该列用作数据B树的关键。表中的所有其他列都存储在此数据b-tree的数据区域内(大BLOB,CLOB列除外)。
对于每个附加索引,创建一个新的“索引b树”。这个B树的关键是索引列和数据B树的关键字。如果在插入数据后创建了主键,或者主键包含多个列,或者主键不是上面列出的数据类型,则主键存储在新的索引b-tree中。
谢谢托马斯的回应,这有助于更好地理解H2。当然,这是一个问题的答案。 – Tim 2010-07-26 20:10:28