изменить таблицу добавить несколько столбцов после столбца 1

202

Мне нужно добавить несколько столбцов в таблицу, но поместить столбцы после столбца с именем 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

Как я могу использовать AFTER в запросе вроде этого?

  • 3
    На каком диалекте вы говорите? Похоже, MySQL для меня. Но синтаксис ALTER TABLE немного отличается между диалектами.
  • 2
    Извините, да.
Показать ещё 2 комментария
Теги:
ddl

7 ответов

438
Лучший ответ

Попробуйте это

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

проверьте синтаксис

53

Если вы хотите добавить один столбец после определенного поля, то запрос 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,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL,
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname
  • 3
    Вторая версия с несколькими столбцами у меня не сработала.
  • 3
    Вторая версия отлично сработала для меня. Я использую MySql 5.5.25.
Показать ещё 3 комментария
6

Это верно:

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

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

  • 1
    Я дал +1, но это должен быть комментарий к принятому ответу
1

Это отлично работает для меня:

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

ALTER TABLE users ДОБАВИТЬ КОЛОННУЮ COLUMN NAME DATATYPE (SIZE) ПОСЛЕ EXISTING COLUMN NAME;

Вы можете сделать это с этим, работая отлично для меня.

1

Одна из возможностей заключалась бы в том, чтобы не беспокоиться о переупорядочении столбцов в таблице и просто изменять ее, добавляя столбцы. Затем создайте представление, в котором есть столбцы в нужном вам порядке - при условии, что порядок действительно важен. Представление можно легко изменить, чтобы отразить любое упорядочение, которое вы хотите. Поскольку я не могу себе представить, что заказ будет важен для программных приложений, представление должно быть достаточным для тех ручных запросов, где это может быть важно.

  • 3
    если я могу добавить свои два цента, «размещение», будь то столбцы или строки таблицы, должно быть несущественным. Электронные таблицы используют местоположение для поиска вещей, базы данных - нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню