WernerK: Unterschied Spalte mit UNIQUE und Unique index?

Hallo

Im Beispiel unten wird ja die Spalte "code" auf "UNIQUE" gesetzt. Es verhindert dadurch doppelte Einträge.

create table t1(
id int primary key,
code varchar(10) unique NULL
);

Man könnte doch aber auch einen unique Index auf die Spalte anlegen.

create table t2(
id int primary key,
code varchar(10) NULL
);

create unique index I_t2 on t2(code);

Beide Varianten verhindern doch doppelte Einträge.
Was ist denn der genaue Unterschied bzw. welche Variante ist vorzuziehen?

vielen Dank
Gruss
Werner

  1. Beide Varianten verhindern doch doppelte Einträge.

    Nein.
    Ein Index hilft dir salop gesagt beim suchen von Einträgen. Ein primary Key, der bei mysql, zwangläufig immer einen Index hat, muss eindeutig sein. Ein Index an sich muss nicht eindeutig sein.
    Soweit ich weiß erzeugt mysql bei anlegen einer unique Spalte jedoch automatisch einen Index mit - da kann ich mich aber auch irren.

    Gruß
    Irrender
    T-Rex

  2. Tach!

    Im Beispiel unten wird ja die Spalte "code" auf "UNIQUE" gesetzt. Es verhindert dadurch doppelte Einträge.
    Man könnte doch aber auch einen unique Index auf die Spalte anlegen.
    Was ist denn der genaue Unterschied bzw. welche Variante ist vorzuziehen?

    Es gibt keinen Unterschied zwischen beiden Varianten - zumindest nicht in dem Fall. Das Ergebnis ist ein Unique-Index auf der Spalte code. Ein UNIQUE (genauso wie beim PRIMARY KEY) nach dem Feld legt den Index gleich im Zuge des Tabellenerstellens an, das separate Statement macht das lediglich später.

    Wenn du einen Index über mehrere Spalten legen willst, kannst du nicht die Angabe beim Feld nutzen sondern musst den Index separat definieren. Aber nicht nur ein separates CREATE INDEX erledigt diesen Job, Indexe lassen sich auch im CREATE TABLE nach den Feldern angeben. Das wäre dann eine dritte Variante, die Indexerzeugung zu definieren.

    dedlfix.