У меня есть таблица user_interactions
с 4 столбцами:
user_1
user_2
type
timestamp
Первичный ключ есть, (user_1,user_2,type)
и я хочу изменить его на(user_2,user_1,type)
Итак, я сделал следующее:
drop primary key ...
add primary key (user_2,user_1,type)...
и вуаля ...
Проблема в том, что база данных находится на сервере.
Поэтому, прежде чем я смог обновить первичный ключ, уже закралось много дубликатов, и они постоянно появляются.
Что делать?
Что я хочу сделать сейчас, так это удалить дубликаты и оставить те, timestamp
которые находятся в самом последнем (столбец в таблице).
А потом как-нибудь еще раз обновить первичный ключ.
mysql
primary-key
Simplefuzz
источник
источник
Ответы:
В следующий раз используйте один оператор «alter table» для обновления первичного ключа.
Чтобы исправить ситуацию:
Блокировка должна прекратить поступать дальнейшие обновления, пока вы это делаете. Сколько времени это займет, очевидно, зависит от размера вашего стола.
Основная проблема в том, что у вас есть дубликаты с одинаковой меткой времени.
источник
Если первичный ключ является значением auto_increment, вам необходимо удалить автоматическое приращение, затем отбросить первичный ключ, а затем повторно добавить автоматическое приращение
затем добавьте обратно автоматическое приращение
затем установите автоматическое приращение обратно к предыдущему значению
источник
Вы также можете использовать
IGNORE
ключевое слово, например:источник