Tengo una tabla user_interactions
con 4 columnas:
user_1
user_2
type
timestamp
La clave principal es (user_1,user_2,type)
y quiero cambiar a(user_2,user_1,type)
Entonces lo que hice fue:
drop primary key ...
add primary key (user_2,user_1,type)...
y voilá...
El problema es que la base de datos está viva en un servidor.
Entonces, antes de que pudiera actualizar la clave primaria, ya se habían introducido muchos duplicados y se están infiltrando continuamente.
¿Qué hacer?
Lo que quiero hacer ahora es eliminar los duplicados y mantener los que tienen la última versión timestamp
(que es una columna en la tabla).
Y luego, de alguna manera, actualice la clave principal nuevamente.
mysql
primary-key
simplfuzz
fuente
fuente
Respuestas:
La próxima vez, use una sola instrucción "alterar tabla" para actualizar la clave principal.
Para arreglar cosas:
El bloqueo debería evitar que lleguen más actualizaciones mientras lo hace. El tiempo que tarda esto obviamente depende del tamaño de su mesa.
El principal problema es si tiene algunos duplicados con la misma marca de tiempo.
fuente
Si la clave principal resulta ser un valor de auto_increment, debe eliminar el incremento automático, luego soltar la clave principal y luego volver a agregar el incremento automático
luego vuelva a agregar el incremento automático
luego establezca el incremento automático de nuevo al valor anterior
fuente
También puede usar la
IGNORE
palabra clave, ejemplo:fuente