问题 h2 sql,用多列主键创建表?


如何使用。在CREATE TABLE语句中创建多列主键 H2 数据库? 根据我的调查,在mySQL和Apache Derby数据库中执行此操作的代码是:

CREATE TABLE SAMP.SCHED(
    CLASS_CODE CHAR(7) NOT NULL, 
    DAY SMALLINT NOT NULL, 
    STARTING TIME, 
    ENDING TIME,
    PRIMARY KEY (CLASS_CODE, DAY));

但这在h2中不起作用,导致'org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误'

任何帮助深表感谢。谢谢


3002
2018-03-11 03:18


起源

如果我理解文档(h2database.com/html/grammar.html#constraint)恰当的,您的PRIMARY KEY声明没有任何问题 - 该声明是否可能存在其他问题? - David Faber
您发布的声明适合我(当我在H2数据库中运行时没有语法错误)。 - Thomas Mueller
哦,亲爱的,你是对的,我遗漏了代码中的最后一个括号,所以有一个未关闭的括号。对不起,伙计,这是一个非常愚蠢的错误。为麻烦道歉。遗憾的是IDE没有解析SQL字符串并检查这样的东西。 - keithphw
我认为SQL语句不应该是字符串,而是应该在编程语言本身中指定SQL语句。这将使这些问题无效,而且会使代码注入无法进行。这就是我启动H2子项目JaQu的原因。 - Thomas Mueller


答案:


从这里:

这应该工作:

ALTER TABLE SAMP.SCHED ADD PRIMARY KEY (CLASS_CODE, DAY)

10
2018-03-11 03:26



太好了!感谢快速回复icyrock,这是有效的。仍然如此奇怪,在CREATE TABLE语句中没有明显的方法可以做到这一点。 - keithphw
当然,很高兴它成功了! - icyrock.com
该 CREATE TABLE(..., PRIMARY KEY(CLASS_CODE, DAY)) 适用于H2数据库。运行语句时,其他一切都一定是错的。 - Thomas Mueller
你是对的,谢谢托马斯。为我的白痴道歉。我才意识到你是H2背后的工程师。这是一个很棒的项目,教程很棒(h2database.com/html/tutorial.html#web_applications),其他任何数据库项目都没有这么全面的指南或易于使用的双击jar文件。 - keithphw