Ich versuche, eine Tabelle zu ändern, die weder einen Primärschlüssel noch eine Spalte auto_increment enthält. Ich weiß, wie man eine Primärschlüsselspalte hinzufügt, habe mich aber gefragt, ob es möglich ist, Daten automatisch in die Primärschlüsselspalte einzufügen (ich habe bereits 500 Zeilen in der Datenbank und möchte ihnen eine ID geben, aber ich möchte dies nicht manuell tun). . Irgendwelche Gedanken? Vielen Dank.
mysql
primary-key
FlyingCat
quelle
quelle
alter table
den Schlüssel problemlos hinzufügen, aber MySQL generiert keine IDs für Felder, die diese noch nicht haben. Sie müssen die vorhandenen Felder manuell aktualisieren und dann sicherstellen, dass Ihr neues auto_increment mit dem richtigen Versatz beginnt. Der Standardwert ist "1", und Sie erhalten sowieso nur doppelte Schlüsselfehler.Antworten:
Eine
ALTER TABLE
Anweisung zum Hinzufügen derPRIMARY KEY
Spalte funktioniert in meinen Tests ordnungsgemäß:In einer temporären Tabelle, die zu Testzwecken erstellt wurde, hat die obige Anweisung die
AUTO_INCREMENT
id
Spalte erstellt und Auto-Inkrement-Werte für jede vorhandene Zeile in der Tabelle eingefügt, beginnend mit 1.quelle
FIRST
zBALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
diesen Wert an,SELECT * FROM table_name WHERE id = LAST_INSERT_ID()
und die meisten Programmiersprachen-APIs bieten eine Funktion / Methode, um diesen Wert im Anwendungscode zurückzugeben.Angenommen, Sie haben keine Spalte für die automatische Inkrementierung wie id, nein, dann können Sie diese mithilfe der folgenden Abfrage hinzufügen:
Wenn Sie eine Spalte haben, ändern Sie diese mithilfe der folgenden Abfrage in die automatische Inkrementierung:
quelle
FIRST
am Ende?id
Spalte zur ersten in der Tabelle und nicht zur letzten, was das Standardverhalten ist.Ja, so etwas würde es tun, vielleicht ist es nicht das Beste, aber Sie möchten vielleicht ein Backup erstellen
Beachten Sie, dass die von
any_field
Ihnen ausgewählte Option beim Aktualisieren identisch sein muss.quelle
Für diejenigen wie mich, die einen
Multiple primary key defined
Fehler bekommen, versuchen Sie:In MySQL v5.5.31 wurde die
id
Spalte als Primärschlüssel für mich festgelegt und jede Zeile mit einem inkrementierenden Wert gefüllt .quelle
Am einfachsten und schnellsten finde ich das
quelle
Ich konnte diese Anweisungen anpassen. Nehmen Sie eine Tabelle mit einem vorhandenen nicht inkrementellen Primärschlüssel, fügen Sie der Tabelle einen inkrementierenden Primärschlüssel hinzu und erstellen Sie einen neuen zusammengesetzten Primärschlüssel mit dem alten und dem neuen Schlüssel als zusammengesetzten Primärschlüssel Code:
Wenn dies erledigt ist, existiert das Feld _USER_ID und enthält alle Zahlenwerte für den Primärschlüssel genau wie erwartet. Mit der "DROP TABLE" oben können Sie dies immer wieder ausführen, um mit Variationen zu experimentieren.
Was ich nicht zum Laufen bringen konnte, ist die Situation, in der eingehende AUSLÄNDISCHE SCHLÜSSEL vorhanden sind, die bereits auf das Feld USER_ID verweisen. Ich erhalte diese Meldung, wenn ich versuche, ein komplexeres Beispiel mit einem eingehenden Fremdschlüssel aus einer anderen Tabelle zu erstellen.
Ich vermute, dass ich alle Fremdschlüssel abreißen muss, bevor ich die ALTER-Tabelle mache, und sie anschließend neu erstellen muss. Aber jetzt wollte ich diese Lösung mit einer herausfordernderen Version der ursprünglichen Frage teilen, falls andere in diese Situation geraten sollten.
quelle
Exportieren Sie Ihre Tabelle, leeren Sie Ihre Tabelle, fügen Sie das Feld als eindeutige INT hinzu, ändern Sie es in AUTO_INCREMENT und importieren Sie die zuvor exportierte Tabelle erneut.
quelle
Mit dem folgenden Befehl können Sie einer vorhandenen Tabelle, die Sequenznummern enthalten kann, eine neue Primärschlüsselspalte hinzufügen.
quelle
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
Ich hatte das gleiche Problem, also habe ich das Feld für den Primärschlüssel gelöscht, dann neu erstellt und sichergestellt, dass es automatisch inkrementell ist. Das hat bei mir funktioniert. Ich hoffe es hilft anderen
quelle
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;
Hier ist tableName der Name Ihrer Tabelle,
tableName ist Ihr Spaltenname, der primär geändert werden muss
MEDIUMINT ist ein Datentyp Ihres vorhandenen Primärschlüssels
AUTO_INCREMENT Sie müssen nur auto_increment nach nicht null hinzufügen
Dadurch wird der Primärschlüssel automatisch_inkrementiert ......
Hoffe das ist hilfreich :)
quelle
Wie schreibe ich PHP, um das bereits vorhandene Feld (Name, in diesem Beispiel) zu ändern, um es zu einem Primärschlüssel zu machen? Ohne zusätzliche 'ID'-Felder zur Tabelle hinzuzufügen.
Dies ist eine aktuell erstellte Tabelle - Anzahl der gefundenen Datensätze: 4 Name VARCHAR (20) JA Rasse VARCHAR (30) JA Farbe VARCHAR (20) JA Gewicht SMALLINT (7) JA
Dies ist ein angestrebtes Endergebnis (TABELLENBESCHREIBUNG) -
Anzahl der gefundenen Datensätze: 4 Name VARCHAR (20) KEINE PRI-Rasse VARCHAR (30) JA Farbe VARCHAR (20) JA Gewicht SMALLINT (7) JA
Anstatt dies zu bekommen -
Anzahl der gefundenen Datensätze: 5 id int (11) NO PRI name VARCHAR (20) JA Rasse VARCHAR (30) JA Farbe VARCHAR (20) JA Gewicht SMALLINT (7) JA
nach dem Versuch ..
$ query = "ALTER TABLE Rennpferde ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)";
Wie bekomme ich das? - -
Anzahl der gefundenen Datensätze: 4 Name VARCHAR (20) KEINE PRI-Rasse VARCHAR (30) JA Farbe VARCHAR (20) JA Gewicht SMALLINT (7) JA
dh INSERT / ADD .. usw. der Primärschlüssel IN den ersten Felddatensatz (ohne Hinzufügen eines zusätzlichen 'id'-Feldes, wie zuvor angegeben.
quelle