Ja, MySQL bietet die Möglichkeit dazu.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Ich weiß nicht, wofür Sie diese Tabelle verwenden, aber es hört sich so an, als ob dieser eindeutige Schlüssel ein starker Kandidat für den Primärschlüssel der Tabelle sein könnte. Ein Primärschlüssel ist automatisch auch ein eindeutiger Schlüssel. Wenn Sie sich entscheiden, ihn zum Primärschlüssel zu machen, gehen Sie stattdessen wie folgt vor:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Wenn Sie eine Fehlermeldung erhalten, dass bereits ein Primärschlüssel vorhanden ist, geben Sie ALTER TABLE MyTable DROP PRIMARY KEY
ein und wiederholen Sie dann den obigen Befehl.)
Bearbeiten: Als Antwort auf einen Benutzerkommentar
Sie können nicht mehrere Zeilen mit identischem Nicht-NULL
haben Werte für die vom eindeutigen Schlüssel abgedeckten Spalten. Sie können also nicht zwei Zeilen haben, in denen group_id = 0 AND user_id = 5
ist , zum Beispiel. 0 ist ein Wert. Aber wenn Sie eine oder beide Spalten nullfähig machen, können Sie das können mehrere Zeilen haben, die bis zur Positionierung von NULL
identisch sind s. Sie könnten also zwei (oder mehr) Zeilen haben, in denen group_id IS NULL AND user_id = 1234
ist .
Vorbehalt:Das Obige gilt für beide häufig verwendeten MySQL-Speicher-Engines (MyISAM und InnoDB). MySQL hat Speicher-Engines, in denen NULL
wird als eindeutiger Wert angesehen, aber Sie verwenden sie wahrscheinlich nicht.
Wenn Sie eine oder beide Spalten nullfähig machen, kann Ihr eindeutiger Schlüssel nicht der Primärschlüssel sein – ein Primärschlüssel muss sich auf Spalten befinden, die NOT NULL
sind .
Angenommen, Sie haben diesen Schlüssel zu Ihrem Primärschlüssel gemacht und möchten nun NULL
zulassen in der group_id
Säule. Ich weiß nicht, welcher Datentyp group_id
ist ist im Moment; Ich gehe davon aus, dass es derzeit INT UNSIGNED NOT NULL
ist , aber Sie müssen das Folgende ändern, wenn dies nicht der Fall ist. Sie können diesen Schlüssel nicht mehr als Primärschlüssel verwenden. Hier ist ein Befehl, den Sie ausführen könnten, um die gewünschten Änderungen vorzunehmen:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)