web-dev-qa-db-de.com

Wie fügen Sie einer vorhandenen Tabelle einen eindeutigen Schlüssel hinzu (mit nicht eindeutigen Zeilen)

Ich möchte der vorhandenen Tabelle einen komplexen eindeutigen Schlüssel hinzufügen. Schlüssel enthält aus 4 Feldern (user_id, game_id, date, time) . Aber Tabelle hat nicht eindeutige Zeilen . Ich verstehe, dass ich alle doppelten Datumsangaben entfernen und anschließend komplexe Schlüssel hinzufügen kann.

Möglicherweise existiert eine andere Lösung, ohne alle doppelten Daten zu durchsuchen. (wie zum Beispiel Unikat hinzufügen usw. hinzufügen).

UPD Ich habe gesucht, wie doppelte MySQL-Zeilen entfernt werden können. Ich denke, es ist eine gute Lösung Duplikate nur mit einer MySQL-Abfrage entfernen?

49
yAnTar

Sie können tun, wie yAnTar empfohlen

ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY

OR

Sie können eine Einschränkung hinzufügen

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)

Ich denke, um Ihre vorhandenen Daten nicht zu verlieren, können Sie eine Spalte mit Indentität hinzufügen und dann einen zusammengesetzten Schlüssel erstellen.

102
Igor Lozovsky

ALTER TABLE 0_value_addition_setup ADD UNIQUE (value_code)

13
radhason power

Ich musste ein ähnliches Problem lösen. Ich habe eine große Quelltabelle von MS Access mit fast 15.000 Datensätzen geerbt, die keinen Primärschlüssel hatten, die ich normalisieren und CakePHP-kompatibel machen musste. Eine Konvention von CakePHP ist, dass jede Tabelle einen Primärschlüssel hat, dass sie die erste Spalte ist und dass 'id' genannt wird. Die folgende einfache Anweisung hat unter MySQL 5.5 den Trick für mich getan:

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);

Dies fügte eine neue Spalte 'id' vom Typ integer vor den vorhandenen Daten hinzu (Schlüsselwort "FIRST"). Das Schlüsselwort AUTO_INCREMENT inkrementiert die IDs, beginnend mit 1. Nun hat jede Datenmenge eine eindeutige numerische ID. (Ohne die Anweisung AUTO_INCREMENT werden alle Zeilen mit der ID = 0 aufgefüllt.).

9
user3149374

Ich stelle meine Lösung mit der Annahme Ihrer Geschäftslogik zur Verfügung. Grundlegend in meinem Entwurf erlaube ich dem Tisch, nur einen Datensatz für eine Benutzer-Spiel-Kombination zu speichern. Also füge ich der Tabelle einen zusammengesetzten Schlüssel hinzu.

PRIMARY KEY (`user_id`,`game_id`)
3
Slowcoder

Erstellen Sie entweder eine Auto-Inkrement-ID oder eine UNIQUE-ID und fügen Sie sie dem natürlichen Schlüssel hinzu, über den Sie mit den 4 Feldern sprechen. Dadurch wird jede Zeile in der Tabelle einzigartig ...

2
Hituptony

Für MySQL:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
0
Vette

Legen Sie den Mehrfachschlüssel in der Tabelle fest

ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
0
prakash kumar