Verwenden Sie mehrere Spalten als eindeutige ID für mysql
Ich habe eine mysql Tabelle mit folgenden Spalten:
group_id
game_id
user_id
message
last_update
Möchte ich es so machen, dass keine zwei Zeilen existieren können, wo der Wert der group_id für Zeile x ist gleich dem Wert der group_id für Zeile y UND der Wert der user_id für Zeile x ist gleich die Wert der user_id für Zeile y.
So, zum Beispiel, sagen wir, ich fügen Sie die folgende folgende Werte:
group_id = 783
game_id = 34
user_id = 29237
message = none
last_update = 11233452
Den oben genannten Daten, auch wenn ein mysql-query versucht, um es einzufügen, sollten Sie nicht erstellen Sie eine neue Zeile, wenn eine Zeile bereits vorhanden ist mit der gleichen Kombination von group_id und user_id. Gibt es eine Möglichkeit, dies zu tun? Grundsätzlich, ich versuche, zwei Spalten zusammen zu arbeiten, wie ein eindeutiger index.
InformationsquelleAutor der Frage user396404 | 2010-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, die MySQL bietet die Möglichkeit, dies zu tun.
Ich weiß nicht, was Sie mit Hilfe dieser Tabelle, aber es klingt wie diese einzigartige Schlüssel sein könnte ein starker Kandidat für den Primärschlüssel der Tabelle. Ein Primärschlüssel wird automatisch ein eindeutiger Schlüssel als gut. Wenn Sie sich entscheiden, es zu machen, die primär-Schlüssel, und führen Sie dann Folgendes statt:
(Wenn Sie eine Fehlermeldung erhalten, dass bereits ein primary key ist, dann Frage
ALTER TABLE MyTable DROP PRIMARY KEY
und wiederholen Sie dann den oben genannten Befehl.)Edit: In Reaktion auf Benutzer-Kommentar
Können Sie nicht mehrere Zeilen mit identischen nicht-
NULL
Werte für die Spalten abgedeckt, die durch den eindeutigen Schlüssel. Damit Sie nicht zwei Zeilen, in denengroup_id = 0 AND user_id = 5
zum Beispiel. 0 ist ein Wert. Aber wenn Sie eine oder beide der Spalten null-Werte zulässt, Sie kann haben mehrere Zeilen, die identisch sind bis auf die Positionierung vonNULL
s. So könnte man zwei (oder mehr) Zeilen, in denengroup_id IS NULL AND user_id = 1234
.VORBEHALT: Die oben genannten gilt für Häufig verwendete MySQL-Speicher-engines (InnoDB und InnoDB). MySQL unterstützt haben Speicher-engines in die
NULL
gilt als ein eindeutiger Wert, aber Sie sind wahrscheinlich nicht mit Ihnen.Wenn Sie eine oder beide Spalten null-Werte zulässt, dann Ihre eindeutigen Schlüssel kann nicht der primary key - Primärschlüssel hat, um auf Spalten, die
NOT NULL
.Nehmen wir an, Sie hatte diesen Schlüssel, Primärschlüssel und nun möchten Sie zulassen
NULL
imgroup_id
Spalte. Ich weiß nicht, welchen Datentypgroup_id
ist im moment; ich werde davon ausgehen, es ist derzeitINT UNSIGNED NOT NULL
aber Sie wird sich ändern müssen, um die unten, wenn es nicht diese. Sie wäre nicht mehr in der Lage, mit diesem Schlüssel als Primärschlüssel. Hier ist ein Befehl, den Sie ausführen könnte, um die gewünschten änderungen vor:InformationsquelleAutor der Antwort Hammerite
gut für diese, die Sie erstellen können zusammengesetzte Schlüssel group_id und user_id mit jeder mysql-editor wie phpmyadmin oder sqlyog, und markieren Sie Sie als eindeutigen index.
InformationsquelleAutor der Antwort Nik