2016-09-07 1 views
0

erstellen Wenn ich ein neues Tabel in meiner h2-Datenbank wie folgt erstellen ...H2 Datenbank Primärschlüssel auf

CREATE TABLE MAININCOMER(timestamp TIMESTAMP, value REAL);

Es bedeutet, dass die ID ausgeblendet wird und Autoinkrement, wenn ich an die Tabel schreiben , Recht? - (soweit ich aus dem Tutorial und den Funktionen gelernt habe)

Wird ein Primärschlüssel der ID automatisch zugewiesen? und wie wichtig ist der Primärschlüssel überhaupt in der Art der Tabelle mit nur 2 Spalten? Oder sollte ich als Best Practice die Tabelle mit dem dem Zeitstempel zugewiesenen Primärschlüssel erstellen?

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

Danke, Alex

+0

"* Dies bedeutet, dass die ID ausgeblendet wird *" - NEIN. Es bedeutet, dass Ihre Tabelle keine "ID" -Spalte hat - nicht einmal eine "versteckte". Wenn Sie eine Spalte namens ID haben möchten, müssen Sie sie definieren. –

Antwort

0

No: Ihre Tabelle keine ID Spalte haben wird, wie es CREATE TABLE in Ihrer DDL nicht aufgeführt ist.

Der einfachste Weg, den ich für das Hinzufügen solcher automatisch inkrementieren Spalte als Primärschlüssel verwendet wird, ist ID IDENTITY. Sei vorsichtig, da es spezifisch für H2 ist und nicht tragbar ist.

Aber es ist so viel kürzer als bei jeder anderen Datenbank :-D

Sie bitte Ihre DDL ändern, um diese volle Linie:

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

Sie können es testen innerhalb H2 Webkonsole wie folgt aus:

Dies wird 1000 Datensätze einfügen und Sie werden sehen, dass ID als BIGINT(19) NOT NULL definiert ist, wird eine PRIMARY KEY-Einschränkung zugewiesen werden und es ist autoincreme schön.

Es ist eine schlechte Praxis, Zeitstempel als Primärschlüssel zu verwenden. Es ist schwierig, eindeutige Einschränkungen zu gewährleisten, da Sie das Ereignis zur gleichen Zeit erreichen können (abhängig von Ihrer Zeitauflösung). Plus-Integer sind viel einfacher zu indizieren und wiederzufinden.

+0

Okay, schauen wir uns das größere Bild an, was ich erreichen möchte. Ich habe eine Umgebungsaufruf DGLux5 Hier verbinde ich mit einem Energiezähler und protokollieren Daten in eine Tabelle, wenn ich es öffne, hat es Spalte Zeile, Zeitstempel und Wert. Ich muss diese in einer Datenbank speichern, H2 das ist. Jetzt müssen meine Datentabelle und H2-Tabelle nicht identisch sein, um die Daten zu übertragen? Zu meiner nächsten Frage, wie schreibe ich mehrere Datensätze aus der Datentabelle in die Datenbank? Mit INSERT INTO tbl_name VALUES (..., ...), (..., ...), (..., ...), ...., (..., ...); ? In der dglux Scripting Umgebung (JavaScript) kann ich – Lexus

+0

tableGetRows (@ parent.table) verwenden und es gibt mir ein Ergebnis, das wie folgt aussieht [[0, "2016-09-08T07: 03: 00.184 "," 50.16 "], [1," 2016-09-08T07: 05: 00.340 "," 50.17 "]] - wie um alles in der Welt könnte ich die Zeilenspalte entfernen? Entferne die" um den Zeitstempel und ersetze es mit 'und entfernen Sie die "aus dem Wert, um mir letztlich diese INSERT INTO tbl_name WERTE (' 2016-09-08T07: 03: 00.184 ', 50.16), (' 2016-09-08T07: 05: 00.340 ', 50.17) ; – Lexus

+0

Sie können diese Daten einfügen, ohne die ID zu verwenden: Es wird der ID-Wert für Sie erstellt.Wenn Sie die ursprünglichen Zeileninformationen behalten müssen, würde ich vorschlagen, '' 'in hainincomer (original_row, timestamp, value) -Werte einzufügen (10, "2016-09-08T07: 03: 00.184", "50.16") '' ' –

0

dies ausprobieren:

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

Ich brauche keine ID-Spalte, da ich Daten von einem Energiezähler in eine temporäre Tabelle protokolliere, die 2 Spalten Zeitstempel und Wert hat. Wenn ich dies in eine Datenbanktabelle schreiben möchte, denke ich, dass diese beiden Tabellen identisch sein müssen. Benötige ich einen Primärschlüssel, der einer der Spalten zugewiesen ist? – Lexus

+0

Wenn Sie einen Fremdschlüssel verwenden, dann ist die Verwendung entweder eines Primärschlüssels oder eines eindeutigen Schlüssels obligatorisch @Lexus – dharan

Verwandte Themen