我正在尝试使用单个查询创建具有不同索引的表,但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只是不支持在单个查询中创建带索引的表?
答案 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);