Как переместить столбцы в таблице 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);