You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

Загрузка...

Как изменить столбец в MySQL

Цель данного руководства или статьи рассмотреть изменение некоторых качеств столбцов или колонок в таблице MySQL, а именно:

  • Переименование столбца;
  • Изменение типа данных столбца;
  • Изменить положение столбца относительно других столбцов.

Все эксперименты работают как на MySQL версии 5.7 так и на версии 8. И абсолютно не важно какая операционная система: Windows XP, 7, 8, 8.1, 10, Linux и т.д. Если удалось установить MySQL на вашу операционную систему, то будьте уверены, всё что будет описано ниже у вас сработает.


Предварительно создам тестовую таблицу "articles" в тестовой базе "testdb" для экспериментов:

итак, создаём таблицу:


CREATE DATABASE IF NOT EXISTS testdb;

Создание таблиц MySQL если она ещё не создана


USE testdb;

CREATE TABLE IF NOT EXISTS articles (
	ID INT UNSIGNED AUTO_INCREMENT
	, Title VARCHAR(30)
	, Content VARCHAR(30)
	, CONSTRAINT PK_articles_id PRIMARY KEY (ID)
) engine=innodb DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Создание таблицы articles

Заполним таблицу articles тестовыми данными:


I NSERT INTO articles (Title, Content) VALUES
('Статья 1','Текст статьи 1'),
('Статья 2','Текст статьи 2'),
('Статья 3','Текст статьи 3'),
('Статья 4','Текст статьи 4'),
('Статья 5','Текст статьи 5');

Вышеуказанный код система безопасности не пропускает, пришлось вставить пробел в "I NSERT", если будете копировать данный код, преобразуйте слово "I NSERT" в "INSERT" и у вас всё заработает.

Тестовая вставка данных


Ну что ж, теперь притупим к основной цели данного руководства.

Для переименования понадобится оператор ALTER TABLE  с CHANGE [COLUMN] и MODIFY [COLUMN].

Ознакотесь также со скрином из официальной документации:

Скрин из официальной документации CHANGE и MODIFY

Переименуем колонку Content в content1 в таблице articles:


ALTER TABLE articles CHANGE content content1 VARCHAR(30);

Изменение имени столбца без изменения типа данных

К сожалению при использовании CHANGE даже если просто необходимо изменить название столбца, всё равно приходится указывать тип данных и если тип данных не нужно менять, тогда нужно указать тот же самый тип данных, который уже есть в таблице у этого столбца.

Теперь попробуем изменить имя столбца content1 на Content но без указания типа дынных и посмотрим что получится:


ALTER TABLE articles CHANGE content1 Content;

Переименование столбца без указания типа данных - ошибка

без указания типа данных переименование завершается ошибкой!

Переименуем данную колонку content1 в Content и изменим тим данных varchar(30) на тип данных TEXT:


ALTER TABLE articles CHANGE content1 Content TEXT;

Использование CHANGE для переименования столбца и типа данных

Изменим положение колонки Content, а именно, поместим её после столбца ID также снова изменим имя и тип данных, чтобы посмотреть работу этих параметров в совокупности:


ALTER TABLE articles CHANGE Content Content35 VARCHAR(256) AFTER ID;

Изменение положения колонки в таблице CHANGE

Хотелось бы сразу уточнить, что я не понял как работает параметр FIRST:

Ошибка с CHANGE FIRST

Запрос с FIRST заканчитвается ошибкой. Так что если есть необходимость какой-либо столебц поставить на 1-е место, например тот же Content, то его надо поставить сначала на 2- место, т.е. после ID, а затем уже с помощью AFTER поставить ID после Content:


ALTER TABLE articles CHANGE Content35 Content TEXT;
ALTER TABLE articles CHANGE ID ID INT UNSIGNED AFTER Content;

Перемещение столца на первое место с помощью CHANGE AFTER

Первым запросом изменил только имя столбца и тип данных, а поскольку он уже был на втором месте, то AFTER не испоользовал. Вторым запросом столбец ID был помещён на второе место.


Переходим к параметру MODIFY в ALTER TABLE.

MODIFY может изменить только тип данных колонки и расположение в таблице относительно других столбцов, например поместим Content после Title и изменим тип данных с TEXT на MEDIUMTEXT:


ALTER TABLE articles MODIFY Content MEDIUMTEXT AFTER Title;

Изменение типа данных и расположение столбца с MODIFY

Также можно изменить тип данных не меняя положения относительно других столбцов:


ALTER TABLE articles MODIFY Content TEXT;

Изменение типа данных колонки с MODIFY


ALTER TABLE articles MODIFY Content TEXT AFTER ID;

Изменение положения столбца с помощью MODIFY

c FIRST та же проблема, почему-то не работает:

Проблема FIRST с MODIFY

 

Итог: Переименование столбцов, их типов данных и положения относительно других столбцов  с помощью ALTER TABLE CHANGE/MODIFY корректно работает, кроме параметра FIRST.