Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden Sie mehrere Spalten als eindeutige Kennung für mysql

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`)