Hinzufügen mehrerer Spalten NACH einer bestimmten Spalte in MySQL


361

Ich muss einer Tabelle mehrere Spalten hinzufügen, aber die Spalten nach einer aufgerufenen Spalte positionieren lastname.

Ich habe das versucht:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

Ich erhalte diesen Fehler:

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von ') AFTER lastname' in Zeile 7


Wie kann ich AFTER in einer solchen Abfrage verwenden?


5
Welchen Dialekt sprichst du? Sieht für mich nach MySQL aus. Die ALTER TABLESyntax variiert jedoch etwas zwischen den Dialekten.
Damien_The_Unbeliever

Mögliches Duplikat von MySQL Alter Table Feld
hinzufügen

1
Ich denke, Sie benötigen ein AFTER-Schlüsselwort für jede der Spalten, die Sie hinzufügen. Ob das bedeutet, dass alle 3 NACH dem Nachnamen oder eine separate ALTER TABLE-Anweisung pro neuer Spalte sein müssen, kann ich nicht mit Sicherheit sagen.
Zec

Antworten:


728

Versuche dies

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

Überprüfen Sie die Syntax


6
[ Als zusätzliche Informationen ] Mehrere ADD, ALTER, DROP, und CHANGEKlauseln in einer einzigen erlaubt sind ALTER TABLEAnweisung durch Komma getrennt. Dies ist eine MySQL-Erweiterung für Standard-SQL, die nur eine Klausel pro ALTER TABLE-Anweisung zulässt.
informatik01

@ Ayyappan Können wir das in SQL Server tun?
Roshan

77

Wenn Sie nach einem bestimmten Feld eine einzelne Spalte hinzufügen möchten, sollte die folgende MySQL-Abfrage funktionieren:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

Wenn Sie mehrere Spalten hinzufügen möchten, müssen Sie jedes Mal den Befehl 'ADD' für eine Spalte verwenden. Hier ist die MySQL-Abfrage dafür:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

Punkt zu beachten

Bei der zweiten Methode sollte die letzte ADD COLUMN Spalte tatsächlich die erste Spalte sein, die Sie an die Tabelle anhängen möchten.

Zum Beispiel: Wenn Sie hinzufügen möchten count, log, statusnachdem er in der genauen Reihenfolge lastname, dann würde die Syntax tatsächlich sein:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
Die zweite Version hat bei mir perfekt funktioniert. Ich verwende MySql 5.5.25.
Norman

ist das letzte Bit Code , um die Spalten in der Reihenfolge hinzufügen count, log, statusoder count, status, log?
Sarfaraaz

1
Hinweis: Wenn Sie das Bit 'AFTER lastname' nicht hinzufügen, gilt die Reihenfolge, in der die letzte Spalte, die Sie in diese Liste der Änderungstabellen eingefügt haben, zuerst kommt, nicht wirklich. Wenn Sie also die Tabelle ALTER TABLE ADD COLUMN blah1, ADD COLUMN blah2 ausführen; (beachten Sie keine 'AFTER'-Klausel), die Spalte blah1 wird zuerst angehängt, dann blah2.
Hongyi Li

10

Sie können nicht mehrere Spaltennamen mit Kommas verwenden ADD COLUMN. Sie müssen ADD COLUMNjedes Mal erwähnen, wenn Sie eine neue Spalte definieren.


4
Ich gab eine +1, aber dies sollte ein Kommentar zu der akzeptierten Antwort sein
mjsarfatti

9

Dieser ist richtig:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Sie können es damit machen, gut für mich arbeiten.


1

Eine Möglichkeit wäre, sich nicht darum zu kümmern, die Spalten in der Tabelle neu zu ordnen und sie einfach durch Hinzufügen der Spalten zu ändern. Erstellen Sie dann eine Ansicht mit den Spalten in der gewünschten Reihenfolge - vorausgesetzt, die Reihenfolge ist wirklich wichtig. Die Ansicht kann leicht geändert werden, um jede gewünschte Reihenfolge widerzuspiegeln. Da ich mir nicht vorstellen kann, dass die Reihenfolge für programmatische Anwendungen wichtig ist, sollte die Ansicht für manuelle Abfragen ausreichen, bei denen dies wichtig sein könnte.


4
Wenn ich meine zwei Cent hinzufügen darf, sollte "Platzierung", ob Tabellenspalten oder Zeilen, unerheblich sein. Tabellenkalkulationen verwenden den Speicherort, um Dinge zu finden, Datenbanken nicht.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) NACH stat

Es wird gute Ergebnisse geben.


0

Das funktioniert gut für mich:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

Einen Kommentar stehlen, um Stimmen zu bekommen. Tu diesen Kumpel nicht.
MBouwman

0

Die Lösung, die für mich mit dem Standardwert 0 funktioniert hat, ist die folgende

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Alternative:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

Bringt sie in die gewünschte Reihenfolge, während die AFTER-Anweisung optimiert wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.