2012-08-09 5 views
6

Ich bin neu bei h2.Ich benutze nur h2 im Frühjahr eingebetteten Modus mit Hibernate.Ich versuche, die folgenden Skripte mit h2 ausführen.Tabellenerstellung mit h2 Datenbank

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

Die Tabelle acct_authority wird ohne Fehler erstellt. Aber wenn ich eine andere Tabelle mit dem folgenden Skript erstellen.

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

Es zeigt Fehler als Constraint-Name bereits vorhanden.Was Fehler ich getan habe.

Antwort

10

Sie haben versucht, zwei Constraints mit demselben Namen zu erstellen. Wie Sie sehen, CREATE TABLE beide Aussagen enthalten folgende:

UNIQUE KEY name (name) 

Ergebnis ist, dass zuerst ein Name Einschränkung genannt schafft und zweite schlägt fehl, weil Zwang Name bereits vorhanden ist. Das Problem kann durch Verwendung eindeutiger Namen gelöst werden. Allgemein ist es sinnvoll, ein wenig aussagekräftigere Namen für Datenbankobjekte zu haben. Vielleicht können Sie zum Beispiel so etwas wie folgt verwenden:

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

Ja, das ist das Problem. Ich wollte nur hinzufügen, die einzige Datenbank, die ich kenne, die nicht eindeutige Constraint-Namen unterstützt, ist MySQL (dort müssen Constraint-Namen nur innerhalb einer Tabelle eindeutig sein). Alle anderen Datenbanken erfordern, dass Constraint-Namen innerhalb eines Schemas eindeutig sind. –