Frage

Früher habe ich die MyISam Storage Engine für MySQL verwendet und die Kombination von drei Feldern definiert, um einzigartig zu sein.

Jetzt habe ich zu InnoDB gewechselt, was ich annehme, dieses Problem verursacht zu haben, und jetzt null! = Null.

Für die folgende Tabelle:

ID (Auto) |  Field_A   | Field_B  | Field_C

Ich kann (field_a, field_b, field_c) Werte (1,2, null) (1,2, null) (1,2, null) unendlich viele Male einfügen.

Wie kann ich dieses Verhalten verhindern?

War es hilfreich?

Lösung

Hängt von den Geschäftsregeln ab, aber die erste Idee wäre, festzulegen field_a und field_b als Hauptschlüssel für die Tabelle. Eine auto_increment-Spalte kann für eine nicht-primäre Schlüsselspalte verwendet werden. Das Schlüsselattribut muss jedoch mit der Spalte auto_increment zugeordnet werden:

CREATE TABLE your_table (
  ID int auto_increment not null,
  Field_A VARCHAR(45),
  Field_B VARCHAR(45),
  Field_C VARCHAR(45),
  key(ID), --without this, you'll get MySQL ERROR #1075
  primary key(field_a, field_b)
);

Die andere Alternative ist, a hinzuzufügen Eindeutige Einschränkung (MySQL implementiert sie als Index):

CREATE UNIQUE INDEX blah_ind USING BTREE ON your_table(field_a, field_b)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top