2012-08-09 250 views
6

我是h2的新手。我只是在hibernate中使用h2的春天嵌入模式。我嘗試使用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是沒有任何error.But創建。

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

它顯示錯誤,因爲約束名已存在。我做了什麼錯誤。

回答

10

您試圖使用相同的名稱創建兩個約束。正如你看到的,CREATE TABLE語句包含以下內容:

UNIQUE KEY name (name) 

結果是,第一個創建約束命名,因爲約束已經存在第二個失敗。問題可以通過使用唯一名稱來解決。另外一般情況下,數據庫對象具有更多的描述性名稱是合理的。也許你可以使用例如類似以下內容:

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

是的,這就是問題所在。我只是想補充一點,我知道支持非唯一約束名稱的唯一數據庫是MySQL(其中,約束名稱只需要在表中唯一)。所有其他數據庫都要求約束名稱在模式中是唯一的。 – 2012-08-09 18:10:40