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