La mise à jour de MySQL clé primaire
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 de (user_2,user_1,type)
Donc ce que j'ai fait :
drop primary key ...
add primary key (user_2,user_1,type)...
et le tour est joué...
Le problème est que la base de données est en ligne sur un serveur.
Donc avant que je puisse mettre à jour la clé primaire, de nombreux doublons déjà répandue, et ils sont constamment sentir.
Quoi faire?
Ce que je veux faire maintenant, c'est de supprimer les doublons et de garder ceux avec la dernière timestamp
(qui est une colonne de la table).
Puis en quelque sorte mise à jour de la clé primaire de nouveau.
- J'ai soudain mal à l'aise pour chaque DBA j'ai maudit sous mon souffle...
- la prochaine fois ajouter une clé unique avec les mêmes colonnes que la clé primaire, puis mise à jour de la clé primaire
- tee hee
- c'est en direct sur un serveur, mais c'est une copie de sauvegarde-backup server :-). Je ne suis pas administrateur, mais je ne vais pas essayer cette chose VRAIMENT sur un serveur live 🙂
- oui c'est ce que je pensais maintenant, très tard, si 🙂
- J'ai toujours pensé qu'un tableau pouvais avoir UN primary_key. Vous avez 3 ?!? Peut-être ce que vous voulez, c'est un PK et les index sur les 2 autres colonnes?
- C'est un composé de la clé primaire.
Vous devez vous connecter pour publier un commentaire.
La prochaine fois, l'utilisation d'un "alter table" déclaration de mise à jour de la clé primaire.
Pour arranger les choses:
Le verrouillage doit arrêter d'autres mises à jour à venir pendant que vous faites cela. Combien de temps cela prend dépend évidemment de la taille de votre table.
Le principal problème est que si vous avez des doublons à la même heure.
Si la clé primaire se trouve être un auto_increment de la valeur, vous devez supprimer l'incrément automatique, puis jeter la clé primaire puis ajouter à nouveau l'auto-incrémentation des
puis ajouter l'auto incrément
puis réglez auto incrément de retour à la valeur précédente
Vous pouvez utiliser le
IGNORE
mot clé trop, exemple: