Как перемещать столбцы в таблице MySQL?

В настоящее время у меня следующая таблица MySQL: Employees (empID, empName, department);

Я хочу изменить таблицу на следующее: Employees (empID, department, empName);

Как это можно сделать с помощью операторов ALTER?

Примечание. Я хочу изменить только позиции столбца.

Ответ 1

Если empName является столбцом VARCHAR (50):

ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;

ИЗМЕНИТЬ

В комментариях вы также можете сделать это:

ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;

Обратите внимание, что повторение empName является преднамеренным. Вы должны сказать MySQL, что хотите сохранить одно и то же имя столбца.

Вы должны знать, что обе версии синтаксиса специфичны для MySQL. Они не будут работать, например, в PostgreSQL или многих других СУБД.

Другое редактирование: Как отметил @Luis Rossi в комментарии, вам нужно полностью указать измененное определение столбца непосредственно перед модификатором AFTER. Вышеприведенные примеры имеют только VARCHAR(50), но если вам нужны другие характеристики (например, NOT NULL или значение по умолчанию), вам также необходимо включить их. Для получения дополнительной информации обратитесь к документам ALTER TABLE.

Ответ 2

Изменить положение столбца:

ALTER TABLE Employees 
   CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;

Если вам нужно перенести его в первую позицию, вы должны использовать термин FIRST в конце запроса ALTER TABLE CHANGE [COLUMN]:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;

Ответ 3

phpMyAdmin предоставляет графический интерфейс для этого в представлении структуры таблицы. Установите флажок, чтобы выбрать столбец, который вы хотите переместить, и нажмите на действие изменения в нижней части списка столбцов. Затем вы можете изменить все свойства столбца, и вы найдете функцию "move column" в крайнем правом углу экрана.

Конечно, это всего лишь построение запросов в превосходном верхнем ответе, но поклонники графического интерфейса могут оценить альтернативу.

моя версия phpMyAdmin - это 4.1.7

Ответ 4

Мне пришлось запустить это для столбца, представленного на более поздних этапах продукта, в 10 + таблицах. Так написал этот быстрый untidy script, чтобы сгенерировать команду alter для всех соответствующих таблиц.

SELECT CONCAT("ALTER TABLE `",TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` `",COLUMN_NAME,"` BIGINT AFTER `id`;")
FROM information_schema.COLUMNS c
WHERE TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND COLUMN_NAME = '<COLUMN TO MOVE>'
AND TABLE_TYPE = 'BASE TABLE'
AND '<COLUMN TO MOVE AFTER>' 
        IN (SELECT COLUMN_NAME 
            FROM information_schema.COLUMNS c2 
            WHERE c.TABLE_NAME = c2.TABLE_NAME);