Добавление нескольких столбцов ПОСЛЕ определенного столбца в MySQL


362

Мне нужно добавить несколько столбцов в таблицу, но расположить столбцы после столбца с именем 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, чтобы найти правильный синтаксис для использования рядом с ') AFTER lastname' в строке 7


Как я могу использовать ПОСЛЕ в запросе, как этот?


5
На каком диалекте вы говорите? Похоже, MySQL для меня. Но ALTER TABLEсинтаксис немного варьируется между диалектами.
Damien_The_Unbeliever


1
Я думаю, вам нужно ключевое слово AFTER в каждом столбце, который вы добавляете. Это означает, что вам нужно, чтобы все 3 были AFTER фамилией или отдельным оператором ALTER TABLE для каждого столбца, я не могу сказать наверняка.
Зек

Ответы:


729

Попробуй это

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

Если вы хотите добавить несколько столбцов, вам нужно использовать команду «ДОБАВИТЬ» каждый раз для столбца. Вот запрос 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
примечание: если вы не добавите бит «ПОСЛЕ фамилии», то порядок, в котором последний столбец, который вы поместили в этот список таблиц изменений, стоит первым, на самом деле не применяется. Поэтому, когда вы делаете ALTER TABLE table ADD COLUMN blah1, ADD COLUMN blah2; (обратите внимание, что пункт «ПОСЛЕ» отсутствует), сначала добавляется столбец blah1, затем blah2.
Хонги Ли

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

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (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.