Dodawanie wielu kolumn PO określonej kolumnie w MySQL

361

Muszę dodać kilka kolumn do tabeli, ale ustawić kolumny po kolumnie o nazwie lastname.

Próbowałem tego:

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:

Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL, czy lastnamew wierszu 7 znajduje się odpowiednia składnia do użycia w pobliżu „) PO ”


Jak mogę użyć PO w takim zapytaniu?

Koala
źródło
5
W jakim dialekcie mówisz? Dla mnie wygląda na mysql. Ale ALTER TABLEskładnia różni się nieco między dialektami.
Damien_The_Unbeliever
1
Myślę, że potrzebujesz słowa kluczowego PO każdej dodawanej kolumnie. Niezależnie od tego, czy oznacza to, że potrzebujesz wszystkich 3, aby BYĆ PO nazwisku, czy oddzielnej instrukcji ALTER TABLE dla każdej nowej kolumny, nie mogę tego powiedzieć na pewno.
Zec

Odpowiedzi:

728

Spróbuj tego

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

sprawdź składnię

Ayyappan Sekar
źródło
6
[ Jako dodatkowa informacja ] Wielokrotne ADD, ALTER, DROPi CHANGEklauzule dopuszczalne w jednym ALTER TABLErachunku, oddzielone przecinkami. Jest to rozszerzenie MySQL do standardowego SQL, które dopuszcza tylko jedną z każdej klauzuli na instrukcję ALTER TABLE.
informatik01
@ Ayyappan Czy możemy to zrobić na serwerze SQL?
Roshan
77

Jeśli chcesz dodać pojedynczą kolumnę po określonym polu, powinna działać następująca kwerenda MySQL:

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

Jeśli chcesz dodać wiele kolumn, musisz użyć polecenia „DODAJ” za każdym razem dla kolumny. Oto zapytanie MySQL w tym celu:

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

Wskazać na notatkę

W drugiej metodzie ostatnia ADD COLUMN kolumna powinna być pierwszą kolumną, którą chcesz dołączyć do tabeli.

Np: jeśli chcesz dodać count, log, statusdokładnie w takiej kolejności, po lastname, wtedy składnia faktycznie być:

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
użytkownik3106476
źródło
3
Druga wersja działała dla mnie idealnie. Używam MySql 5.5.25.
Norman
nie ostatni kawałek kodu dodać kolumny w kolejności count, log, statuslub count, status, log?
Sarfaraaz,
1
Uwaga: jeśli nie dodasz bitu „PO Nazwisko”, to kolejność, w jakiej ostatnia kolumna, którą umieściłeś na liście zmian w tabeli zmian, nie ma tak naprawdę zastosowania. Więc kiedy zrobisz ALTER TABELĘ ADD COLUMN blah1, ADD COLUMN blah2; (uwaga bez klauzuli „PO”), najpierw dodana zostanie kolumna bla1, a następnie bla2.
Hongyi Li
10

Nie można wymieniać wielu nazw kolumn za pomocą przecinków ADD COLUMN. Musisz wymieniać za ADD COLUMNkażdym razem, gdy definiujesz nową kolumnę.

Piyush Saxena
źródło
4
Dałem +1, ale powinien to być komentarz do zaakceptowanej odpowiedzi
mjsarfatti
9

Ten jest poprawny:

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`;
Denys Popov
źródło
3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Możesz to zrobić, działając dobrze dla mnie.

Gaurav Singh
źródło
1

Jedną z możliwości byłoby nie zawracać sobie głowy zmienianiem kolejności kolumn w tabeli i po prostu modyfikować je, dodając kolumny. Następnie utwórz widok z kolumnami w żądanej kolejności - zakładając, że kolejność jest naprawdę ważna. Widok można łatwo zmienić w celu odzwierciedlenia dowolnego zamówienia. Ponieważ nie mogę sobie wyobrazić, że kolejność byłaby ważna dla aplikacji programistycznych, widok powinien wystarczyć dla tych ręcznych zapytań, w których może być ważny.

Ahmed
źródło
4
jeśli mogę dodać dwa centy, „umieszczenie”, niezależnie od tego, czy kolumny tabeli czy wiersze, powinny być nieistotne. Arkusze kalkulacyjne używają lokalizacji do znajdowania rzeczy, bazy danych nie.
Mike S.
1

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

To da dobre wyniki.

TechyFlick
źródło
0

To działa 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';
Aiswarya TS
źródło
Kradzież komentarza w celu uzyskania głosów. Nie rób tego kolego.
MBouwman
0

Rozwiązanie, które działało dla mnie z wartością domyślną 0, jest następujące

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0
Jorge Santos Neill
źródło
0

Alternatywnie:

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

Ustawi je w żądanej kolejności, usprawniając instrukcję PO.

WestAce
źródło