Ich habe eine Tabelle user_interactions
mit 4 Spalten:
user_1
user_2
type
timestamp
Der Primärschlüssel ist (user_1,user_2,type)
und ich möchte zu ändern(user_2,user_1,type)
Also was ich getan habe war:
drop primary key ...
add primary key (user_2,user_1,type)...
und voila ...
Das Problem ist, dass die Datenbank auf einem Server aktiv ist.
Bevor ich den Primärschlüssel aktualisieren konnte, haben sich bereits viele Duplikate eingeschlichen, die sich ständig einschleichen.
Was ist zu tun?
Was ich jetzt tun möchte, ist, Duplikate zu entfernen und die neuesten zu behalten timestamp
(dies ist eine Spalte in der Tabelle).
Und dann irgendwie den Primärschlüssel wieder aktualisieren.
mysql
primary-key
simplfuzz
quelle
quelle
Antworten:
Verwenden Sie beim nächsten Mal eine einzelne Anweisung "alter table", um den Primärschlüssel zu aktualisieren.
Um Dinge zu reparieren:
Die Sperre sollte verhindern, dass weitere Updates eingehen, während Sie dies tun. Wie lange dies dauert, hängt natürlich von der Größe Ihres Tisches ab.
Das Hauptproblem besteht darin, dass Sie einige Duplikate mit demselben Zeitstempel haben.
quelle
Wenn der Primärschlüssel zufällig ein Wert für auto_increment ist, müssen Sie das Auto-Inkrement entfernen, den Primärschlüssel löschen und das Auto-Inkrement erneut hinzufügen
Fügen Sie dann das automatische Inkrement wieder hinzu
Stellen Sie dann das automatische Inkrement auf den vorherigen Wert zurück
quelle
Sie können auch das
IGNORE
Schlüsselwort verwenden, Beispiel:quelle