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

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

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

как это можно сделать с помощью ALTER заявления?

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

4 ответов


если 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 для получения дополнительной информации.


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

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

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

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

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

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

моя версия phpMyAdmin и is 4.1.7


мне пришлось запустить это для столбца, представленного на более поздних этапах продукта, в таблицах 10+. Поэтому написал этот быстрый неопрятный скрипт для генерации команды 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);