J'ai une table avec 21 millions de rangées.Je devons changer l'un des noms de la ligne.Lorsque j'essaie avec la requête "ALTER TABLE COMPANY Change ID NEW_ID INT (11)"; La requête ne finit jamais. P>
Y a-t-il un moyen simple de changer le nom de champ de Big MySQL de la table? p>
5 Réponses :
Que pensez-vous de: p>
C'est juste une idée rapide, mais ce ne sera pas rapide (exportateur / importateur). P>
ou juste essayer de faire de l'alter pendant la nuit de quelques heures d'entretien? :) p>
Tout d'abord, avant quoi que ce soit, sauvegarde la table:
ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;
Également si l'alter dégage pour une raison quelconque pour une raison quelconque, vous pouvez rechercher et remplacer le champ ID INT (11) CODE> INTERNE DU TABLE DE CRISE CODE> INTERNE CODE> INCL dans le
BIG_TABLE.BACKUP .sql code> Fichier de sauvegarde pour correspondre à ce que vous voulez, puis l'importe normalement à l'aide de
mysql -uroot -p dB .
Thank.Je essaye.Je postera le résultat.
J'ai essayé la recommandation.Oui ça marche comme prévu.J'ai utilisé Split and Cat afin d'éditer le fichier BIG SQL.
Super. Ajouter peut-être les changements et les étapes que vous avez dû faire pour le faire fonctionner complètement et laisse ensuite fermer la question :)
Vous pouvez simplement effectuer ce qui suit:
DROP TABLE big_table; ALTER TABLE big_table_bak RENAME big_table;
Ce n'est pas si simple si vous avez 21 millions de lignes ...
Ouais j'ai 77 millions d'enregistrements. cela peut prendre trop de temps que je pense, commentera tard depuis combien de temps il faut
La méthode de consommation moins de temps pour modifier le nom d'un champ dans une énorme table MySQL consiste à: P>
Créer une table new_big_table Sélectionnez ID comme New_id, Field1, Field2, Field3 de Big_Table. P>
Utilisez PT-Online-Schema-Change pour faire des modifications de table Alter à long terme, sans vous enfermer de la table. P>
http://www.percona.com/ Doc / Percona-Toolkit / Pt-Online-Schema-Change.html P>
Il faut généralement plus longtemps em> pour compléter le changement, mais vous pouvez toujours lire et écrire à la table pendant que cela fait son travail. P>
Vous pouvez également écouter un webinaire de l'auteur en parlant de la façon dont cela fonctionne et certaines de ses mises en garde: P>
http: // www. percona.com/webinars/2012-05-02-zzero-downtime-schema-changes-in-mysql p>
Avez-vous essayé de le faire dans phpmyadmin? Qui pourrait utiliser une méthode plus efficace
J'ai essayé avec Phpmyadmin et Commandline.
Vous pouvez faire un mysqldump et modifier le fichier de vidage. Puis réimportez les données.
La colonne est-elle définie comme int (11) sans autre attributs? Si vous ne changez que le nom MySQL ne devrait que mettre à jour les métadonnées sans toucher les lignes. Quel moteur de stockage utilisez-vous?
Je suis sûr que votre suggestion se termine mais je veux juste changer le nom de champ. La vidage de la table sera de près de 10 Go. Cela ne semble pas être un moyen efficace.
Effectivement vider / importation est assez rapide. Surprenant donc.
Joni oui c'est juste int (11).
Si vous utilisez Innodb, je suppose que vous devez simplement attendre qu'il finit: "Les modifications qui modifient uniquement des métadonnées de table et non des données de table peuvent être formulées immédiatement en modifiant le fichier .FRM de la table et ne touche pas le contenu de la table. Les modifications suivantes sont des modifications rapides qui peuvent être fabriquées de cette façon: renommer une colonne, à l'exception du moteur de stockage InnoDB. " dev.mysql.com/doc/refman/5.5/fr/ alter-table.html
Le moteur de stockage est myisam.
La documentation indique la renommation d'une colonne, à l'exception du moteur de stockage InnoDB modifie uniquement des métadonnées de table et non des données de table peuvent être effectuées immédiatement en modifiant le fichier .FRM de la table et ne touche pas le contenu de la table. Mais ce n'est pas le cas pour moi.
Êtes-vous capable de résoudre ce problème?