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?

Koala
quelle
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

Ayyappan Sekar
quelle
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
user3106476
quelle
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.

Piyush Saxena
quelle
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`;
Verweigert Popov
quelle
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.

Gaurav Singh
quelle
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.

Ahmed
quelle
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.

TechyFlick
quelle
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';
Aiswarya TS
quelle
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
Jorge Santos Neill
quelle
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.

WestAce
quelle