10

我是 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)
);

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

4

1 回答 1

15

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

UNIQUE KEY name (name)

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

  UNIQUE KEY acct_authority_name_UNIQUE (name)  
  ...  
  UNIQUE KEY acct_role_name_UNIQUE (name)
于 2012-08-09T17:45:31.140 回答