10

私はh2を初めて使用します。hbernateを使用してSpringEmbeddedモードで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

同じ名前で2つの制約を作成しようとしました。ご覧のとおり、両方のCREATETABLEステートメントには次のものが含まれています。

UNIQUE KEY name (name)

その結果、最初のものはnameという名前の制約を作成し、2番目のものは制約がすでに存在するため失敗します。一意の名前を使用することで問題を解決できます。また、一般的に、データベースオブジェクトの名前をもう少しわかりやすくすることは理にかなっています。たぶん、あなたは例えば次のようなものを使うことができます:

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