web-dev-qa-db-ja.com

H2データベースで、単一のクエリでテーブルを作成するときにインデックスを追加します

単一のクエリで異なるインデックスを持つテーブルを作成しようとしていますが、H2では次のようなエラーが発生します。

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

しかし、これは次のようにエラーを出します

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

このため、インデックスを使用してテーブルを作成するには、2つの異なるクエリを実行する必要があります。テーブルを作成する最初のクエリ、次にインデックスを追加する2番目のクエリ

create INDEX c_fid on tbl_Cust(fid);

クエリに何か問題がありますか、それともH2が単一のクエリでインデックスを使用したテーブルの作成をサポートしていないだけですか?

11
user4099884

興味深い質問です。このソリューションは、MySQL互換モードを含むため、さらに興味深いものです。

Jdbc urlにMySQLモードを追加するだけで、実際には、作成したのとまったく同じコマンドを実行できますなし変更はありません。

次のようなURLの例:jdbc:h2:mem:;mode=mysql

SQLは残ります:

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)

残念ながら、私は以前にこの質問を見ていませんでした...うまくいけば、解決策はいつか誰かに役立つかもしれません:-)

13

私は問題を解決することができました。 http://www.h2database.com/html/grammar.html#create_index によるとクエリを変更しました。それは私のH2サーバーでうまく動作します。

    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);
4
KittyKotte