在H2数据库中,在单个查询中创建表时添加索引

时间:2014-10-10 08:55:43

标签: sql indexing 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个不同的查询来创建带有索引的表。第一个查询创建表,然后第二个查询用

添加索引
create INDEX c_fid on tbl_Cust(fid);

我的查询中是否有问题,或者H2只是不支持在单个查询中创建带索引的表?

2 个答案:

答案 0 :(得分:9)

有趣的问题。解决方案更有趣,因为它涉及MySQL兼容模式。

实际上可以执行与完成相同的命令而不用进行任何修改,前提是您只需将您的jdbc url添加到MySQL模式。

示例网址如下: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)

太糟糕了我之前没有看到这个问题...希望有一天解决方案可能对某人有用: - )

答案 1 :(得分:4)

我可以解决这个问题。根据 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);