2013-07-09 4 views
229

Ich muss mehrere Spalten zu einer Tabelle hinzufügen, aber die Spalten nach einer Spalte namens lastname positionieren.alter table add MULTIPLE Spalten NACH Spalte1

Ich habe dies 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 diesen Fehler:

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 ') AFTER lastname ' at line 7

Wie kann ich, nachdem sie in einer Abfrage wie folgt verwenden?

+2

Welche Dialekt sprechen Sie? Sieht für mich wie mysql aus. Aber die "ALTER TABLE" -Syntax variiert ein wenig zwischen Dialekten. –

+2

Sorry, ja mysql. – Koala

+0

möglich Duplikat von [MySQL Tabelle ändern Feld vor oder nach einem bereits vorhandenen Feld hinzufügen] (http://stackoverflow.com/questions/3379454/mysql-alter-table-add-field-before-for-or-after-a-field -ready-present) –

Antwort

471

Versuchen Sie, diese

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`; 

Kontrolle der syntax

1

Eine Möglichkeit wäre, sich nicht um die Neuordnung der Spalten in der Tabelle zu kümmern und sie einfach durch Hinzufügen der Spalten zu modifizieren. 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 anzuzeigen. Da ich mir nicht vorstellen kann, dass die Reihenfolge für programmatische Anwendungen wichtig ist, sollte die Ansicht für die manuellen Abfragen ausreichen, bei denen es wichtig sein könnte.

+3

Wenn ich meine zwei Cents hinzufügen kann, "Placement", ob Tabellenspalten oder Zeilen, sollte immateriell sein. Tabellen verwenden den Ort, um Dinge zu finden, Datenbanken nicht. –

54

Wenn Sie einzelne Spalte nach bestimmten Feld hinzufügen möchten, dann ist die MySQL-Abfrage ist:

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

Wenn Sie mehrere hinzufügen möchten Spalten, dann müssen Sie den Befehl "ADD" jedes Mal für eine Spalte verwenden. Die MySQL-Abfrage wie folgt dar:

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, die letzte ADD COLUMNSpalte sollte eigentlich die erste Spalte, die Sie der Tabelle anhängen möchten sein.

z: Wenn Sie count, log, status um nach lastname hinzufügen möchten, dann würde die Syntax tatsächlich sein:

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

Die zweite Version mit mehreren Spalten funktionierte nicht für mich. – divinedragon

+3

Die zweite Version funktionierte perfekt für mich. Ich benutze MySql 5.5.25. – Norman

+0

fügt das letzte Bit des Codes die Spalten in der Reihenfolge "count", "log", "status" oder "count", "status", "log" hinzu? – Sarfaraaz

1

ALTER TABLE ADD COLUMN users COLUMN NAME DATENTYP (SIZE) NACH EXISTING COLUMN NAME;

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

6

Das 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`; 
4

Sie nicht mehrere Spaltennamen mit Kommas ADD COLUMN erwähnen kann. Sie müssen jedes Mal, wenn Sie eine neue Spalte definieren, ADD COLUMN angeben.

+1

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

1

Dies 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';