Keine eindeutigen Einträge?

lisali

Erfahrenes Mitglied
Hallo,

kann ich irgendwie im Vorfeld verhindern, dass MySQL es nicht zulässt, dass spezifische Spalten mehr als 1 Mal vorkommen können?

Ich möchte zum Beispiel, dass bei meiner Bewertungs-Tabelle die Spalte "uid" und "rid" nur eindeutig sein dürften.

Ist das mit MySQL bestimmbar oder müsste ich das sozusagen manuell mit PHP überprüfen?

PS: Es geht nicht um's Select, sondern Insert.
 
Du meinst wohl die Einträge in den Spalten müssen eindeutig sein, bei den Spalten gibts nur eindeutige :D

Code:
CREATE TABLE example (uid int unique,rid int unique,...);
 
Hmm... aber es geht mir darum, dass nur die beiden zusammen eindeutig sein dürften. Das heißt vereinzelt soll uid oder rid auch gleiche Werte haben können.

Kann man da was machen?
 
Auf Anhieb fiele mir nur das Zusammenlegen in einen Wert ein. Beispielsweise speicherst du aus uid=010 und rid=032 in einer Hilfsspalte checkuidrid den Wert 010032 ab. Diese Zahl/Spalte ist eindeutig und kann unique gesetzt werden. (Und ich denke, es sollte die einzige unqiue-Spalte sein)

mfg chmee
 
Hallo Lisa,

ein Unique Constraint kann auch über mehrere Spalten gehen:
SQL:
CREATE TABLE tabelle (
  uid INTEGER NOT NULL,
  rid INTEGER NOT NULL,
  UNIQUE (uid, rid)
)
Oder nachträglich hinzufügen:
SQL:
ALTER TABLE tabelle ADD UNIQUE (uid, rid)

Grüße,
Matthias
 
Zuletzt bearbeitet von einem Moderator:
Für Kombinationen nehme ich einen UNIQUE-Index
SQL:
CREATE TABLE tabelle (
  uid INTEGER NOT NULL,
  rid INTEGER NOT NULL,
 UNIQUE INDEX index_name (uid, rid)
)

SQL:
ALTER TABLE tabelle ADD UNIQUE INDEX index_name (uid, rid);
 
Zuletzt bearbeitet von einem Moderator:
Matthias, "Unique"-Spalten werden dann mit UND betrachtet?!
Ja. Die Kombination aus den zum Index gehörigen Spalten muss eindeutig sein, während in einer Spalte allein Werte mehrfach auftauchen können.

Für Kombinationen nehme ich einen UNIQUE-Index
SQL:
CREATE TABLE tabelle (
  uid INTEGER NOT NULL,
  rid INTEGER NOT NULL,
 UNIQUE INDEX index_name (uid, rid)
)

SQL:
ALTER TABLE tabelle ADD UNIQUE INDEX index_name (uid, rid);
Was jetzt aber auch nichts anderes ist mein Vorschlag, nur dass du dem Index explizit einen Namen gibst.

Grüße,
Matthias
 
Zuletzt bearbeitet von einem Moderator:
Matthias und yaslaw: Dann wäre die Lösung wirklich einfach nur das Setzen der beiden genannten Spalten uid und ird auf unique und mysql wird bei update/insert genau so verfahren wie erhofft, hab ich das richtig verstanden?

mfg chmee
 

Neue Beiträge

Zurück