Загрузка...
Цель данного руководства или статьи рассмотреть изменение некоторых качеств столбцов или колонок в таблице MySQL, а именно:
Все эксперименты работают как на MySQL версии 5.7 так и на версии 8. И абсолютно не важно какая операционная система: Windows XP, 7, 8, 8.1, 10, Linux и т.д. Если удалось установить MySQL на вашу операционную систему, то будьте уверены, всё что будет описано ниже у вас сработает.
Предварительно создам тестовую таблицу "articles" в тестовой базе "testdb" для экспериментов:
итак, создаём таблицу:
CREATE DATABASE IF NOT EXISTS testdb;
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 тестовыми данными:
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].
Ознакотесь также со скрином из официальной документации:
Переименуем колонку 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;
Изменим положение колонки Content, а именно, поместим её после столбца ID также снова изменим имя и тип данных, чтобы посмотреть работу этих параметров в совокупности:
ALTER TABLE articles CHANGE Content Content35 VARCHAR(256) AFTER ID;
Хотелось бы сразу уточнить, что я не понял как работает параметр 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;
Первым запросом изменил только имя столбца и тип данных, а поскольку он уже был на втором месте, то AFTER не испоользовал. Вторым запросом столбец ID был помещён на второе место.
Переходим к параметру MODIFY в ALTER TABLE.
MODIFY может изменить только тип данных колонки и расположение в таблице относительно других столбцов, например поместим Content после Title и изменим тип данных с TEXT на MEDIUMTEXT:
ALTER TABLE articles MODIFY Content MEDIUMTEXT AFTER Title;
Также можно изменить тип данных не меняя положения относительно других столбцов:
ALTER TABLE articles MODIFY Content TEXT;
ALTER TABLE articles MODIFY Content TEXT AFTER ID;
c FIRST та же проблема, почему-то не работает:
Итог: Переименование столбцов, их типов данных и положения относительно других столбцов с помощью ALTER TABLE CHANGE/MODIFY корректно работает, кроме параметра FIRST.