Как переместить столбцы в таблице MySQL? - PullRequest
178 голосов
/ 24 июля 2011

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

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

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

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

Ответы [ 4 ]

303 голосов
/ 24 июля 2011

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

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

EDIT

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

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

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

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

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

60 голосов
/ 09 июля 2013

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

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;
11 голосов
/ 20 мая 2014

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

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

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

1 голос
/ 20 июня 2017

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

SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';

SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` 
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT 
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ,"  AFTER 
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME 
    FROM information_schema.COLUMNS c2 
    WHERE c2.TABLE_NAME = t.TABLE_NAME);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...