Ich habe eine Tabelle mit ungefähr 30 Millionen Zeilen in MySQL 5.5 unter Verwendung der InnoDB-Speicher-Engine. Diese Tabelle verfügt über einen Fremdschlüssel, der mit einer anderen Tabelle mit etwa 3 Millionen Zeilen verknüpft ist.
Ich möchte der größeren Tabelle einen Primärschlüssel hinzufügen, bin mir aber nicht sicher, wie ich am besten vorgehen soll. Es gibt keine vorhandene Spalte (oder Spaltengruppe), die ich dafür verwenden kann. Wie soll ich vorgehen?
Ich habe einige Verweise auf eine interne InnoDB-Datensatz-ID gesehen, aber nicht gefunden, ob darauf zugegriffen werden kann.
Andernfalls muss ich möglicherweise die Daten sichern und neu laden und die ID manuell hinzufügen.
Vielen Dank.
mysql
innodb
primary-key
Wodin
quelle
quelle
Antworten:
Dies mag der falsche Weg sein, aber ..
Könntest du nicht einfach die Tabellenstruktur ändern?
Fügen Sie der Tabelle eine Primärschlüsselspalte hinzu
dann...
Schreiben Sie ein schnelles Skript, um die gesamte Tabelle durchzugehen
Hinzufügen eines automatisch inkrementierenden Werts zur neuen Spalte?
quelle
ALTER TABLE blah ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
es getan und es hat 2 Stunden und 18 Minuten gedauert :) Ich habe während dieser Zeit nicht versucht, an den Tisch zu schreiben, aber das Lesen hat gut funktioniert.So würde ich das angehen:
* Hinweis: Wenn die Ursprungstabelle InnoDB ist, bleiben Fremdschlüsseleinschränkungen erhalten und überleben die Umbenennung. Sie müssen also eine Änderung vornehmen, um dies zu beheben.
quelle