使用h2数据库创建表

elv*_*mar 7 spring hibernate h2

我是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)
);
Run Code Online (Sandbox Code Playgroud)

创建表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)
);
Run Code Online (Sandbox Code Playgroud)

它显示错误,因为约束名已经存在.我做了什么错.

Mik*_*unu 12

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

UNIQUE KEY name (name)
Run Code Online (Sandbox Code Playgroud)

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

  UNIQUE KEY acct_authority_name_UNIQUE (name)  
  ...  
  UNIQUE KEY acct_role_name_UNIQUE (name)
Run Code Online (Sandbox Code Playgroud)

  • 是的,这就是问题所在.我只想补充一点,我所知道的唯一支持非唯一约束名称的数据库是MySQL(在那里,约束名称只需要在表中是唯一的).所有其他数据库都要求约束名称在模式中是唯一的. (4认同)