Додавання кількох стовпців ПІСЛЯ певного стовпця в 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.