簡短的回答:你的表的主鍵必須是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