Mam tabelę user_interactions
z 4 kolumnami:
user_1
user_2
type
timestamp
Klucz podstawowy to (user_1,user_2,type)
i chcę zmienić na(user_2,user_1,type)
Więc co zrobiłem to:
drop primary key ...
add primary key (user_2,user_1,type)...
i voila ...
Problem polega na tym, że baza danych działa na serwerze.
Więc zanim mogłem zaktualizować klucz podstawowy, wiele duplikatów już wkradło się i wciąż się wkradają.
Co robić?
Chcę teraz usunąć duplikaty i zachować te z najnowszymi timestamp
(czyli kolumną w tabeli).
A potem jakoś ponownie zaktualizuj klucz podstawowy.
mysql
primary-key
simplfuzz
źródło
źródło
Odpowiedzi:
Następnym razem użyj pojedynczej instrukcji „alter table”, aby zaktualizować klucz podstawowy.
Aby naprawić rzeczy:
Blokada powinna zatrzymać dalsze aktualizacje, gdy to robisz. Jak długo to potrwa, zależy oczywiście od wielkości twojego stołu.
Główny problem polega na tym, że masz kilka duplikatów z tą samą sygnaturą czasową.
źródło
Jeśli klucz podstawowy ma wartość auto_increment, musisz usunąć automatyczną inkrementację, a następnie upuścić klucz podstawowy i ponownie dodać autoinkrementację
następnie dodaj z powrotem automatyczną inkrementację
następnie ustaw automatyczną inkrementację z powrotem do poprzedniej wartości
źródło
Możesz również użyć
IGNORE
słowa kluczowego, na przykład:źródło