Für mich heißt es: Dies würde mehrere Primärschlüssel definieren. Ich benutze InnoDB. Beachten Sie, dass ich bereits 3 davon habe.
LMD
2
Ich würde auf jeden Fall setzen FIRSTnach AUTO_INCREMENT, was bedeutet, dass die iderste Spalte der bereits vorhandenen Tabelle sein. Andernfalls wird es an das Ende der Tabelle gesetzt, wie es jetzt geschrieben ist, was etwas verwirrend sein kann, wenn man es einfach machtSELECT * ...
StefanK
So erhalten Sie einen ersten Platz in der neuen ID-Spalte
TipVisor
17
Vorhandene Spalte
Wenn Sie einer vorhandenen Spalte eine Primärschlüsseleinschränkung hinzufügen möchten, schlägt die zuvor aufgeführte Syntax fehl.
Verwenden Sie das folgende Formular, um einer vorhandenen Spalte eine Primärschlüsseleinschränkung hinzuzufügen:
MySQL erkennt MODIFY nicht als richtige Anweisung (zumindest in XAMPP, InnoDB)
LMD
@LMD Auf welcher MySQL-Version bist du? (HINWEIS: Ich weiß, dass es zu dem Zeitpunkt funktioniert hat, als ich dies gepostet habe, und ich glaube, es war 5.6 ... aber ich kann mich nicht sicher erinnern)
MER
1
Wenn es für Sie, wie für mich, nicht funktioniert, ersetzen Sie MODIFY durch CHANGE und es wird funktionieren!
csr-nontol
12
Wenn Ihre Tabelle ziemlich groß ist, verwenden Sie besser nicht die folgende Anweisung:
Da eine Kopie aller Daten in einer temporären Tabelle erstellt wird, ändern Sie die Tabelle und kopieren Sie sie dann zurück. Mach es besser manuell. Benennen Sie Ihre Tabelle um:
rename table goods to goods_old;
Erstellen Sie eine neue Tabelle mit dem Primärschlüssel und allen erforderlichen Indizes:
createtable goods (
id int(10) unsigned notnull AUTO_INCREMENT
... other columns ...primarykey(id));
Verschieben Sie alle Daten aus der alten Tabelle in eine neue und deaktivieren Sie Schlüssel und Indizes, um das Kopieren zu beschleunigen:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;SET FOREIGN_KEY_CHECKS=1;SET UNIQUE_CHECKS=1;COMMIT;SET AUTOCOMMIT =1;
Das Hinzufügen von PK zu einer Tabelle mit ~ 200 Mio. Zeilen dauert 2 000 Sekunden.
Ich war überrascht, wie lange ich suchen musste, um diese Antwort zu finden. Vielen Dank für diese hilfreichen Beispiele.
Ryan
4
Ich bin mir nicht sicher, ob dies für andere von Bedeutung ist, aber ich ziehe die ID-Tabelle der ersten Spalte in der Datenbank vor. Die Syntax dafür lautet:
Bei mir hat keiner der Vorschläge zu Syntaxfehlern geführt, daher habe ich nur versucht, phpmyadmin (Version 4.9.2), (10.4.10-MariaDB) zu verwenden und eine idSpalte mit automatisch inkrementiertem Primärschlüssel hinzuzufügen . IdSpalte wurde schön vom ersten Element hinzugefügt.
Die Ausgabe der Abfrage war:
ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id);
Antworten:
Nach dem Hinzufügen der Spalte können Sie jederzeit den Primärschlüssel hinzufügen:
ALTER TABLE goods ADD PRIMARY KEY(id)
Um festzustellen, warum Ihr Skript nicht funktioniert hat, müssen Sie
PRIMARY KEY
nicht nur das Wort angebenPRIMARY
:quelle
FIRST
nachAUTO_INCREMENT
, was bedeutet, dass dieid
erste Spalte der bereits vorhandenen Tabelle sein. Andernfalls wird es an das Ende der Tabelle gesetzt, wie es jetzt geschrieben ist, was etwas verwirrend sein kann, wenn man es einfach machtSELECT * ...
Vorhandene Spalte
Wenn Sie einer vorhandenen Spalte eine Primärschlüsseleinschränkung hinzufügen möchten, schlägt die zuvor aufgeführte Syntax fehl.
Verwenden Sie das folgende Formular, um einer vorhandenen Spalte eine Primärschlüsseleinschränkung hinzuzufügen:
quelle
Wenn Ihre Tabelle ziemlich groß ist, verwenden Sie besser nicht die folgende Anweisung:
Da eine Kopie aller Daten in einer temporären Tabelle erstellt wird, ändern Sie die Tabelle und kopieren Sie sie dann zurück. Mach es besser manuell. Benennen Sie Ihre Tabelle um:
Erstellen Sie eine neue Tabelle mit dem Primärschlüssel und allen erforderlichen Indizes:
Verschieben Sie alle Daten aus der alten Tabelle in eine neue und deaktivieren Sie Schlüssel und Indizes, um das Kopieren zu beschleunigen:
- VERWENDEN SIE DIESES FÜR MyISAM- TABELLEN:
ODER
- VERWENDEN SIE DIES FÜR InnoDB- TABELLEN:
Das Hinzufügen von PK zu einer Tabelle mit ~ 200 Mio. Zeilen dauert 2 000 Sekunden.
quelle
Ich bin mir nicht sicher, ob dies für andere von Bedeutung ist, aber ich ziehe die ID-Tabelle der ersten Spalte in der Datenbank vor. Die Syntax dafür lautet:
Das ist nur eine kleine Verbesserung gegenüber der ersten Antwort. Wenn Sie wollten, dass es sich in einer anderen Position befindet, dann
HTH, -ft
quelle
Verwenden Sie diese Abfrage,
quelle
Dieser Code funktioniert in meiner MySQL-Datenbank:
quelle
quelle
Versuche dies,
quelle
Bei mir hat keiner der Vorschläge zu Syntaxfehlern geführt, daher habe ich nur versucht, phpmyadmin (Version 4.9.2), (10.4.10-MariaDB) zu verwenden und eine
id
Spalte mit automatisch inkrementiertem Primärschlüssel hinzuzufügen .Id
Spalte wurde schön vom ersten Element hinzugefügt.Die Ausgabe der Abfrage war:
ALTER TABLE
table_name
ADDid
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);quelle
Entfernen Sie Anführungszeichen, um ordnungsgemäß zu funktionieren ...
quelle