J'ai une table avec environ 30 millions de lignes dans MySQL 5.5 en utilisant le moteur de stockage InnoDB. Cette table a une clé étrangère qui relie à une autre table avec environ 3 millions de lignes.
Je veux ajouter une clé primaire à la plus grande table, mais je ne suis pas sûr de la meilleure façon de procéder. Il n'y a aucune colonne (ou ensemble de colonnes) existante que je peux utiliser pour cela, alors comment dois-je procéder?
J'ai vu quelques références à un ID d'enregistrement InnoDB interne, mais je n'ai pas trouvé s'il était accessible.
Sinon, je devrai peut-être vider et recharger les données, en ajoutant l'identifiant manuellement.
Merci.
mysql
innodb
primary-key
Wodin
la source
la source
Réponses:
ce n'est peut-être pas la bonne façon de procéder, mais ..
ne pourriez-vous pas simplement modifier la structure de la table,
ajouter une colonne de clé primaire à la table
puis...
écrire un script rapide pour parcourir toute la table
ajouter une valeur d'auto-incrémentation à la nouvelle colonne?
la source
ALTER TABLE blah ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
et cela a pris 2 heures et 18 minutes :) Je n'ai pas essayé d'écrire sur la table pendant ce temps, mais les lectures ont bien fonctionné.Voici comment j'aborderais cela:
* Remarque: Si la table d'origine est InnoDB, les contraintes de clé étrangère seront conservées et survivront au changement de nom. Vous devrez donc faire un changement pour y remédier.
la source