Как поменять местами поля (MySQL)

Поменять два поля местами можно при помощи операторов ALTER TABLE и CHANGE COLUMN.

Пример

Есть таблица `changes`, в которой нужно поменять местами 2 поля: `name` и `date`.

Создаем таблицу

CREATE TABLE IF NOT EXISTS `carstock`.`changes` ( `id` INT NOT NULL , `name` VARCHAR(45) NOT NULL , `date` DATE NOT NULL , `count` SMALLINT UNSIGNED NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB

Добавим запись

INSERT INTO `changes` (`name`, `date`, `count`) VALUES ('My name is', '2011-11-15', '10');

SELECT

Если выполнить стандартный селект (SELECT * FROM `changes`), то получим в результате:

mysql> select * from `changes`; +----+------------+------------+-------+ | id | name | date | count | +----+------------+------------+-------+ | 1 | My Name is | 2011-11-15 | 10 | +----+------------+------------+-------+

Меняем `name` и `date`

Поменять поля местами можно двумя запросами.

ALTER TABLE `carstock`.`changes` CHANGE COLUMN `date` `date` DATE NOT NULL AFTER `id`;

или

ALTER TABLE `carstock`.`changes` CHANGE COLUMN `name` `name` VARCHAR(45) NOT NULL AFTER `date`;

Лично мне по душе второй вариант, он лучше воспринимается, все-таки в нем фигурируют оба поля, которые меняем местами.

SELECT

Еще раз выполняем стандартный селект (SELECT * FROM `changes`), и получаем в результате:

mysql> select * from `changes`; +----+------------+------------+-------+ | id | date | name | count | +----+------------+------------+-------+ | 1 | 2011-11-15 | My Name is | 10 | +----+------------+------------+-------+

В результате колонки `date` и `name` удачно поменялись местами.

Заключение

Конструкцией ALTER TABLE ... CHANGE COLUMN ... AFTER, как вы уже догадались, легко не только поменять местами 2 поля, но так же переместить какое-либо поле в начало или в конец.

Категории

СУБДMySQL

Комментарии