2013-07-09 8 views
229

Potrzebuję dodać wiele kolumn do tabeli, ale ustaw kolumny po kolumnie o nazwie lastname.alter table dodaj kolumny MULTIPLE AFTER column1

Próbowałem to:

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

otrzymuję ten błąd:

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

Jak mogę używać po w zapytaniu jak to?

+2

Co dialekt mówisz? Wygląda mi na mysql. Ale składnia 'ALTER TABLE' różni się nieco między dialektami. –

+2

Przepraszam, tak, mysql. – Koala

+0

możliwy duplikat [Zmienna MySQL Dodaj pole Przed lub po polu już obecnym] (http://stackoverflow.com/questions/3379454/mysql-alter-table-add-field-before-or-after-a-field -already-present) –

Odpowiedz

471

Spróbuj to sprawdzić

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

syntax

1

Jedną z możliwości jest nie zawracanie sobie głowy zmianą kolejności kolumn w tabeli i modyfikowanie jej po prostu przez dodanie kolumn. Następnie utwórz widok, który ma kolumny w żądanej kolejności - zakładając, że zamówienie jest naprawdę ważne. Widok można łatwo zmienić, aby odzwierciedlić dowolne zamówienie. Ponieważ nie mogę sobie wyobrazić, że kolejność będzie ważna dla aplikacji programistycznych, widok powinien wystarczyć dla tych ręcznych zapytań, gdzie może to być ważne.

+3

jeśli mogę dodać moje dwa centy, "umieszczenie", czy kolumny lub wiersze tabeli, powinny być nieistotne. Arkusze kalkulacyjne wykorzystują lokalizację, aby znaleźć rzeczy, a bazy danych - nie. –

54

Jeśli chcesz dodać pojedynczą kolumnę po określonej dziedzinie, a następnie zapytanie mysql jest:

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

Jeśli chcesz dodać wielokrotność kolumny, a następnie za każdym razem musisz użyć polecenia "DODAJ" dla kolumny. Kwerenda mysql następująco jako:

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 zauważyć W drugiej metodzie, ostatni ADD COLUMNkolumna powinny być rzeczywiście pierwsza kolumna chcesz dołączyć do stołu.

przykład: jeśli chcesz dodać count, log, status w kolejności po lastname, wówczas składnia byłby rzeczywiście:

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

Druga wersja z wieloma kolumnami nie działa dla mnie. – divinedragon

+3

Druga wersja działa doskonale dla mnie. Używam MySql 5.5.25. – Norman

+0

Czy ostatni bit kodu dodaje kolumny w kolejności 'count',' log', 'status' lub' count', 'status',' log'? – Sarfaraaz

1

ALTER TABLE ADD COLUMN users COLUMN NAME dataType (SIZE) PO EXISTING COLUMN NAME;

Możesz to zrobić, działa dobrze dla mnie.

6

Ta jedna jest poprawna:

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

Nie można wymienić wiele nazw kolumn przecinkami korzystających ADD COLUMN. Musisz wspomnieć o ADD COLUMN za każdym razem, gdy definiujesz nową kolumnę.

+1

Dałem +1, ale powinno to być komentarzem do zaakceptowanej odpowiedzi – mjsarfatti

1

Działa to dobrze dla mnie:

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