J'ai une table user_interactions
avec 4 colonnes:
user_1
user_2
type
timestamp
La clé primaire est (user_1,user_2,type)
et je veux changer en(user_2,user_1,type)
Donc ce que j'ai fait était:
drop primary key ...
add primary key (user_2,user_1,type)...
et voila ...
Le problème est que la base de données est en direct sur un serveur.
Donc, avant que je puisse mettre à jour la clé primaire, de nombreux doublons se sont déjà glissés et ils s'infiltrent continuellement.
Que faire?
Ce que je veux faire maintenant, c'est supprimer les doublons et conserver ceux avec le dernier timestamp
(qui est une colonne dans le tableau).
Et puis, d'une manière ou d'une autre, mettez à nouveau à jour la clé primaire.
mysql
primary-key
simplfuzz
la source
la source
Réponses:
La prochaine fois, utilisez une seule instruction "alter table" pour mettre à jour la clé primaire.
Pour réparer les choses:
Le verrou devrait arrêter les mises à jour supplémentaires pendant que vous faites cela. Le temps que cela prend dépend évidemment de la taille de votre table.
Le problème principal est si vous avez des doublons avec le même horodatage.
la source
Si la clé primaire est une valeur auto_increment, vous devez supprimer l'incrémentation automatique, puis supprimer la clé primaire puis rajouter l'incrémentation automatique
puis rajoutez l'incrémentation automatique
puis remettez l'incrémentation automatique à la valeur précédente
la source
Vous pouvez également utiliser le
IGNORE
mot - clé, par exemple:la source