【问题标题】:h2 sql, create table with multi-column primary key?h2 sql,用多列主键创建表?
【发布时间】:2012-03-27 23:17:00
【问题描述】:

如何使用 h2 数据库在 CREATE TABLE 语句中创建多列主键? 根据我的调查,在 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: Syntax error in SQL statement'

非常感谢任何帮助。谢谢

【问题讨论】:

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

标签: sql h2


【解决方案1】:

从这里开始:

这应该可行:

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

【讨论】:

  • 不错!感谢您的快速回复 icyrock,这行得通。尽管如此,还是很奇怪,在 CREATE TABLE 语句中没有明显的方法来做到这一点。
  • CREATE TABLE(..., PRIMARY KEY(CLASS_CODE, DAY)) 适用于 H2 数据库。运行语句时一定有其他问题。
  • 你是对的,谢谢托马斯。为我的愚蠢道歉。我刚刚意识到你是 H2 背后的工程师。这是一个很棒的项目,教程很棒(h2database.com/html/tutorial.html#web_applications),其他数据库项目都没有如此全面的指南或易于使用的可双击 jar 文件。
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2023-04-05
  • 2016-11-15
相关资源
最近更新 更多