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?
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.
ALTER TABLE 0_value_addition_setup
ADD UNIQUE (value_code
)
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.).
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`)
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 ...
Für MySQL:
ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;
Legen Sie den Mehrfachschlüssel in der Tabelle fest
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);