2010-11-29 14 views
2

Ich habe eine Java-Anwendung erstellt, die Hibernate ORM verwendet, mit Hibernate-Tools bekomme ich ein automatisiertes Skript, das das DB-Schema von den Java-Objekten als Entitäten installiert oder aktualisiert.MySQL: Unique und Index Äquivalenz

Das Programm funktioniert ordnungsgemäß in MySQL, aber für Oracle wird ein Fehler ausgelöst, wenn in einer Spalte die Einschränkung "unique" deklariert wird und nachdem ein Index versucht wird, zu definieren. Oracle sagt, dass eine "eindeutige" Einschränkung einen Index standardmäßig erzeugt, so dass zwei Indizes für dieselbe Spalte nicht deklariert werden können. Meine Frage ist also, ob in MySQL eine Äquivalenz oder Beziehung zwischen der eindeutigen Integritätsbedingung und einem Index besteht.

Bitte klären Sie. Danke im Voraus.

Antwort

0

Eine eindeutige Einschränkung erfordert einen Index, sodass er erzwungen werden kann. Beide DBMS erstellen einen geeigneten Index, wenn Sie Spalten als eindeutig deklarieren. Der einzige Unterschied ist, dass Oracle verhindert, dass Sie redundante Indizes erstellen, aber MySQL nicht:

show index from test_table; 

+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| test_table |   0 | PRIMARY |   1 | id   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
| test_table |   0 | foo_unique |   1 | foo   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
| test_table |   1 | foo_key |   1 | foo   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
+------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
+0

Vielen Dank Jungs – RGB

+0

@RGB, herzlich willkommen. Fühlen Sie sich frei, Ihre Lieblingsantwort als akzeptiert zu markieren ;-) –

0

MySQL interessiert sich einfach nicht für nutzlose Indizes. Bei Aktualisierungen werden alle eindeutigen Indizes überprüft und bei SELECTs wird ein beliebiger Index ausgewählt.

Um Oracle glücklich zu machen, löschen Sie den Index, bevor Sie den eindeutigen Index erstellen.