【问题标题】:Table creation with h2 database使用 h2 数据库创建表
【发布时间】:2012-08-06 18:21:05
【问题描述】:

我是 h2 的新手。我只是在带有 hibernate 的 spring 嵌入模式下使用 h2。我正在尝试使用 h2 执行以下脚本。

CREATE TABLE acct_authority (
  id bigint(20) NOT NULL auto_increment,
  name varchar(255) NOT NULL default '',
  value varchar(255) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY name (name)
);

创建表 acct_authority 没有任何错误。但是如果我使用以下脚本创建另一个表。

CREATE TABLE acct_role (
  id bigint(20) NOT NULL auto_increment,
  name varchar(255) NOT NULL default '',
  PRIMARY KEY  (id),
  UNIQUE KEY name (name)
);

它显示错误,因为约束名称已经存在。我犯了什么错误。

【问题讨论】:

    标签: spring hibernate h2


    【解决方案1】:

    您尝试创建两个具有相同名称的约束。如您所见,两个 CREATE TABLE 语句都包含以下内容:

    UNIQUE KEY name (name)
    

    结果是第一个创建了名为 name 的约束,第二个失败,因为约束 name 已经存在。问题可以通过使用唯一名称来解决。同样,一般来说,为数据库对象使用更多描述性名称是有意义的。也许您可以使用以下内容:

      UNIQUE KEY acct_authority_name_UNIQUE (name)  
      ...  
      UNIQUE KEY acct_role_name_UNIQUE (name)
    

    【讨论】:

    • 是的,这就是问题所在。我只是想补充一下,我知道的唯一支持非唯一约束名称的数据库是 MySQL(在那里,约束名称只需要在表中是唯一的)。所有其他数据库都要求约束名称在模式中是唯一的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2019-01-14
    • 2020-02-14
    • 1970-01-01
    • 2019-01-12
    • 2021-10-30
    相关资源
    最近更新 更多