Додавання кількох стовпців ПІСЛЯ певного стовпця в MySQL


361

Мені потрібно додати кілька стовпців до таблиці, але розташувати стовпці після стовпця, що називається lastname.

Я спробував це:

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

Я отримую цю помилку:

Ви маєте помилку в синтаксисі SQL; перевірте посібник, який відповідає вашій версії MySQL-сервера, чи правильно використовувати синтаксис поблизу ') ПІСЛЯ lastname' у рядку 7


Як я можу використовувати ПІСЛЯ у такому запиті?


5
На якому діалекті ви говорите? Мені схоже на mysql. Але ALTER TABLEсинтаксис дещо різниться між діалектами.
Damien_The_Unbeliever


1
Я думаю, що вам потрібно ПІСЛЯ ключового слова в кожному зі стовпців, які ви додаєте. Чи це означає, що вам потрібно, щоб усі 3 були ПІСЛЯ прізвища або окремим оператором ALTER TABLE в новому стовпчику, я не можу точно сказати.
Зек

Відповіді:


728

Спробуйте це

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

перевірити синтаксис


6
[ В якості додаткової інформації ] Multiple ADD, ALTER, DROPі CHANGEположення дозволяється в одному ALTER TABLEзаяві, розділених комами. Це розширення MySQL до стандартного SQL, яке дозволяє лише одне з кожного пункту для оператора ALTER TABLE.
informatik01

@Ayyappan Чи можемо ми це зробити на сервері sql?
Рошан

77

Якщо ви хочете додати один стовпець після певного поля, то наступний запит MySQL повинен працювати:

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

Якщо ви хочете додати кілька стовпців, тоді вам потрібно використовувати команду "ADD" кожен раз для стовпця. Ось MySQL-запит для цього:

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

Вкажіть на замітку

У другому методі останній ADD COLUMN стовпчик фактично повинен бути першим стовпцем, який ви хочете додати до таблиці.

Наприклад: якщо ви хочете додати count, log, statusв точному порядку після lastname, то синтаксис буде фактично:

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
Друга версія для мене працювала ідеально. Я використовую MySql 5.5.25.
Норман

це останній біт коду додати стовпці в порядку count, log, statusабо count, status, log?
Сарфарааз

1
Примітка: якщо ви не додаєте біт "ПІСЛЯ прізвища", то впорядкування, у якому першим стовпець, який ви помістили у цей список списку змін, дійсно не застосовується. Отже, коли ви робите таблицю ВІДПРАВЛЕННЯ ТАБЛИЦІ ДОДАТИ КОЛІНУ blah1, ADD COLUMN blah2; (зверніть увагу на відсутність пункту "ПІСЛЯ"), спочатку додається стовпець blah1, потім blah2.
Hongyi Li

10

Ви не можете згадати кілька імен стовпців із комами ADD COLUMN. Вам потрібно згадувати ADD COLUMNщоразу, коли ви визначаєте новий стовпець.


4
Я дав +1, але це має бути коментарем до прийнятої відповіді
mjsarfatti

9

Це правильно:

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

Ви можете це зробити з цим, добре працюючи для мене.


1

Однією з можливостей було б не турбуватися про впорядкування стовпців у таблиці та просто змінити її, додавши стовпці. Потім створіть подання, у якому стовпці містяться у бажаному порядку - припускаючи, що порядок є дійсно важливим. Перегляд можна легко змінити, щоб відобразити будь-яке замовлення, яке ви хочете. Оскільки я не можу уявити, що порядок був би важливим для програмних програм, подання повинно вистачити для тих запитів вручну, де це може бути важливим.


4
якщо я можу додати два мої центи, "розміщення" стовпців таблиці чи рядків, має бути несуттєвим. Електронні таблиці використовують розташування, щоб знайти речі, а бази даних - ні.
Майк С.

1

АЛЬТЕР ТАБЛИКА listingДОДАТИ countINT (5), ДОДАТИ logВАРХАР (200), statusДОБАВИТИ ВАРХАР (20) ПІСЛЯ стати

Це дасть хороші результати.


0

Це добре для мене:

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

Викрасти коментар, щоб отримати голоси. Не роби цього, товариш.
MBouwman

0

Рішення, яке працювало для мене зі значенням за замовчуванням 0, наступне

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Як варіант:

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

Впорядкує їх у потрібному порядку під час упорядкування заяви AFTER.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.