2014-10-10 5 views
9

I Tabelle mit verschiedenen Indizes mit einzelner Abfrage zu erstellen versuchen aber H2 Fehler zum Beispiel gibt:In H2 Database, fügen Index während Tabellenerstellung in einzelner Abfrage

create table tbl_Cust 
(
    id int primary key auto_increment not null, 
    fid int, 
    c_name varchar(50), 
    INDEX (fid) 
); 

aber das gibt Fehler als

Unknown data type: "("; SQL statement: 
[Error Code: 50004] 
[SQL State: HY004] 

Aus diesem Grund muss ich 2 verschiedene Abfragen ausführen, um Tabelle mit Index zu erstellen. Erste Abfrage-Tabelle zu erstellen und dann die zweite Abfrage hinzuzufügen Index mit

create INDEX c_fid on tbl_Cust(fid); 

Gibt es etwas falsch in meiner Anfrage oder H2 einfach nicht diese Schöpfung von Tabelle mit dem Index in einzelner Abfrage nicht unterstützt?

+0

Es gibt keine 'index' Option in der' erstellen table' Aussage, die eindeutig im Handbuch dokumentiert ist: http://h2database.com/html/grammar.html#create_table –

+0

@a_horse_with_no_name ich nicht finde die Zeile, die angibt, dass die Indexoption beim Erstellen der Tabelle nicht vorhanden ist. Kannst du diese Linie hier setzen? –

+2

Sehen Sie sich das Syntaxdiagramm (das "Diagramm") für die Anweisung an. Es gibt kein Schlüsselwort "index". –

Antwort

7

Interessante Frage. Die Lösung ist noch interessanter, da es sich um den MySQL-Kompatibilitätsmodus handelt.

Es ist tatsächlich möglich, genau den gleichen Befehl auszuführen, den Sie geschrieben haben ohne jede Änderung, vorausgesetzt, Sie fügen nur zu Ihrer jdbc URL den MySQL-Modus hinzu.

Beispiel-URL wie folgt aus: jdbc:h2:mem:;mode=mysql

SQL bleibt:

create table tbl_Cust ( id int primary key auto_increment not null, fid int, c_name varchar(50), INDEX (fid) ); Update count: 0 (15 ms)

Schade, dass ich diese Frage nicht früher gesehen haben ... Hoffentlich könnte die Lösung praktisch einen Tag jemand geworden: -)

+0

Ihre Anfrage funktioniert nicht für mich. Geben Sie den gleichen Fehler wie in Frage – MayurB

+0

erwähnt. Bitte teilen Sie Ihre DB-URL, Ihre SQL-Abfrage und die Version von H2, die Sie verwenden. –

2

Ich könnte das Problem lösen. Nach http://www.h2database.com/html/grammar.html#create_index habe ich die Abfrage geändert. Es funktioniert gut mit meinem H2-Server.

CREATE TABLE subscription_validator (
     application_id int(11) NOT NULL, 
     api_id int(11) NOT NULL, 
     validator_id int(11) NOT NULL, 
     PRIMARY KEY (application_id,api_id), 
     CONSTRAINT subscription_validator_ibfk_1 FOREIGN KEY (validator_id) REFERENCES validator (id) ON UPDATE CASCADE 
    ); 

    CREATE INDEX validator_id ON subscription_validator(validator_id);