2016-09-07 377 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