我试图用单个查询创建具有不同索引的表,但H2给出了Error例如:
create table tbl_Cust
(
id int primary key auto_increment not null,
fid int,
c_name varchar(50),
INDEX (fid)
);
Run Code Online (Sandbox Code Playgroud)
但这会给出错误
Unknown data type: "("; SQL statement:
[Error Code: 50004]
[SQL State: HY004]
Run Code Online (Sandbox Code Playgroud)
因此,我必须运行2个不同的查询来创建带有索引的表.第一个查询创建表,然后第二个查询添加索引
create INDEX c_fid on tbl_Cust(fid);
Run Code Online (Sandbox Code Playgroud)
我的查询中有什么问题,或者H2只是不支持在单个查询中创建带索引的表吗?
Chr*_*HON 12
有趣的问题.解决方案更有趣,因为它涉及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)
太糟糕了我之前没有看到这个问题...希望有一天解决方案可能对某人有用:-)
我可以解决问题。根据 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);
Run Code Online (Sandbox Code Playgroud)