mysql ddl

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

Мне нужно добавить несколько столбцов в таблицу, но расположить столбцы после (AFTER) столбца с именем lasttname.

Попробовал сделать так:

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

Но получаю эту ошибку:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ") AFTER lastname" at line 7

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

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

И не забудьте проверить синтаксис.

Если вы хотите добавить один столбец после определенного поля, то должен работать следующий 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

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

Вот так если писать, то будет правильно работать:

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

ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Можешь написать так, у меня этот запрос работал отлично.

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

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

ALTER TABLE listing ADD count INT(5), ADD log VARCHAR(200), ADD status VARCHAR(20) AFTER stat

Этот запрос даст отличный результат.

Решение, которое работало для меня со значением по умолчанию 0:

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 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';