MYSQL – ALTER, DROP, RENAME, MODIFY
⚡ Розумний підсумок
ALTER, DROP, RENAME та MODIFY – це MySQL команди, які змінюють форму бази даних після її використання. Вони додають, видаляють, перейменовують та перевизначають об'єкти, такі як таблиці та стовпці, не відкидаючи вже збережені рядки.

Що таке команда ALTER? MySQL?
Команда АЛЬТЕР Команда змінює існуючу базу даних, таблицю, представлення або інший об'єкт бази даних, який потрібно змінити протягом життєвого циклу бази даних. Це команда, яка дозволяє схемі розвиватися після того, як вона вже була створена та заповнена даними.
Бізнес-вимоги рідко стоять на місці, і дизайн бази даних має змінюватися разом з ними. Припустимо, що дизайн бази даних Myflix було впроваджено, і користувачі працюють з ним, і лише тоді команда усвідомлює, що важлива інформація була пропущена. Ніхто не хоче втрачати існуючі рядки; вони просто хочуть записати нову інформацію разом з ними.
ALTER саме так і вирішує цю проблему. Він може змінити тип даних поля з рядка на число, перейменувати поле або додати абсолютно новий стовпець до таблиці, і все це при збереженні даних, що вже зберігаються в таблиці.
Після визначення призначення команди наступним кроком є синтаксис її виконання.
MySQL Синтаксис ALTER
Нижче наведено базовий синтаксис, який використовується для додавання стовпця до вже існуючої таблиці.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
ТУТ
- “ЗМІНИТИ ТАБЛИЦЮ `назва_таблиці`” це команда, яка повідомляє MySQL сервер для зміни таблиці під назвою `table_name`.
- «ДОДАТИ СТОВПЕЦЬ `назва_стовпця` `тип_даних`» це команда, яка повідомляє MySQL сервер, щоб додати новий стовпець з назвою `column_name` з типом даних `data_type`.
Припустимо, що Myflix запровадив онлайн-рахунки та платежі. Для їх підтримки до таблиці учасників потрібно додати поле для номера кредитної картки. Перш ніж вносити будь-які зміни, варто переглянути структуру таблиці в її поточному вигляді. Сценарій, показаний нижче, робить це.
SHOW COLUMNS FROM `members`;
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повні_імена | varchar(350) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
💡 Примітка щодо int(11): Число в дужках – це лише ширина відображення. MySQL У версії 8.0.17 він був застарілим для цілочисельних типів, тому сучасний сервер повідомляє про цей стовпець просто як IntРозмір сховища не змінюється.
Наведений нижче скрипт додає нове поле до таблиці members.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Виконання цього скрипта для myflixdb додає стовпець з назвою credit_card_number до таблиці members з типом даних VARCHAR. Повторний запуск скрипта SHOW COLUMNS дає наступний результат.
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повні_імена | varchar(350) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL | |||
| номер_кредитної_картки | varchar(25) | ТАК | NULL |
Виділений рядок підтверджує, що credit_card_number було додано до таблиці members, і дані, які вже містяться в інших стовпцях, залишаються незмінними.
Додавання стовпця – це лише половина справи. Схема також має позбутися об’єктів, які їй більше не потрібні, що є завданням команди DROP.
Що таке команда DROP? MySQL?
Команда DROP видаляє об'єкт назавжди. Вона використовується для
- Видалити базу даних з MySQL сервер.
- Видалити об'єкт, такий як таблиця або стовпець, з бази даних.
⚠️ Попередження: Операція DROP не є оборотною. Ні об'єкт, ні рядки всередині нього неможливо відновити без резервної копії, тому виконайте команду SELECT для цільового об'єкта та спочатку підтвердьте резервну копію.
Падінняping стовпець
У наведеному вище прикладі ALTER до таблиці members було додано стовпець з назвою credit_card_number. Припустимо, що функцію онлайн-платежів відкладено, і цей стовпець потрібно знову видалити. Наступний скрипт виконує цю функцію.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Виконання скрипта видаляє стовпець credit_card_number з таблиці members. Повторне перерахування стовпців підтверджує результат.
SHOW COLUMNS FROM `members`;
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повні_імена | varchar(350) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
Номер кредитної картки зник зі списку полів.
СТОЛ
Синтаксис для видалення всієї таблиці з бази даних виглядає наступним чином.
DROP TABLE `sample_table`;
Застосоване до реального об'єкта, твердження виглядає так.
DROP TABLE `categories_archive`;
Виконання цієї команди видаляє з бази даних таблицю з назвою `categories_archive` та кожен рядок у ній.
БАЗА БАЗИ ДАНИХ
Те саме ключове слово видаляє всю схему. Додавання IF EXISTS пригнічує помилку, яка MySQL викликає, коли ціль вже зникла, що корисно всередині скриптів, які виконуються більше одного разу.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Видалення об'єкта є остаточним. Коли сам об'єкт має зберегтися, і лише його ім'я неправильне, команда RENAME є правильним інструментом.
Що таке команда RENAME? MySQL?
Команда RENAME змінює ім'я існуючого об'єкта бази даних, такого як таблиця або стовпець, на нове ім'я. Перейменування таблиці не призводить до втрати будь-яких даних, що містяться в ній.
Команда має наступний базовий синтаксис.
RENAME TABLE `current_table_name` TO `new_table_name`;
Щоб перейменувати таблицю movierentals на movie_rentals, використовується наведений нижче скрипт.
RENAME TABLE `movierentals` TO `movie_rentals`;
Виконання цієї команди перейменовує таблицю `movierentals` на `movie_rentals`. Оскільки перейменування — це лише зміна мітки, той самий оператор у зворотному порядку відновлює початкову назву.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE обробляє ім'я таблиці. Перейменування колонка, а зміна того, що він містить, здійснюється за допомогою ключового слова CHANGE.
ЗМІНИТИ ключове слово
Ключове слово CHANGE дозволяє вам
- Зміна назви стовпця
- Зміна типу даних стовпця
- Зміна обмежень стовпців
Розглянемо приклад. Поле full_names у таблиці members має тип даних varchar із шириною 350, як підтверджує наведений нижче скрипт.
SHOW COLUMNS FROM `members`;
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повні_імена | varchar(350) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
Припустимо, що вимога полягає в тому,
- Змініть назву поля з «повне_імена» на «повне_імена»
- Змініть його на тип даних char із шириною 250
- Додайте обмеження NOT NULL
Усі три редагування виконуються однією інструкцією CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Виконання його для myflixdb, а потім запуск скрипта SHOW COLUMNS дає наступний результат.
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повне ім'я | символ(250) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
Стовпець тепер називається fullname, містить char(250) та відхиляє значення NULL.
ЗМІНИТИ ключове слово
Ключове слово MODIFY дозволяє вам
- Змінити тип даних стовпця
- Змінити обмеження стовпців
У наведеному вище прикладі CHANGE ім'я поля довелося вказати двічі, хоча перейменування було лише частиною мети. Пропуск імені поля в операторі CHANGE призводить до помилки. Коли потрібно налаштувати лише тип даних та обмеження, а ім'я має залишитися таким, як є, MODIFY виконує цю роботу з однією згадкою стовпця.
Наведений нижче скрипт змінює ширину поля «повне ім’я» з 250 на 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Виконання його для myflixdb, а потім запуск скрипта SHOW COLUMNS дає результат, показаний нижче.
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повне ім'я | символ(50) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
⚠️ Попередження: Звуження стовпця скорочує дані, які більше не поміщаються. Будь-яке ім'я, довше за 50 символів, скорочується цим оператором, тому перевірте найдовше існуюче значення за допомогою ВИБІР запит перед стисненням поля.
ЗМІНИТИ проти ЗМІНИТИ проти ПЕРЕЙМЕНУВАТИ СТОЛОВЦЯ
Ці три ключові слова перетинаються, і вибір неправильного з них є найпоширенішою причиною помилок у цій області. У таблиці нижче вони порівняні.
| ключове слово | Перейменовує стовпець | Змінює тип та обмеження | Потрібне старе ім'я | Типове використання |
|---|---|---|---|---|
| ЗМІНА | Так | Так | Так, плюс нова назва | Перейменувати та перевизначити в одному операторі |
| ЗМІНИТИ | Немає | Так | Ім'я, дане один раз | Розширення, звуження або передрук стовпця |
| ПЕРЕЙМЕНУВАТИ СТОЛОВЦЯ | Так | Немає | Так, плюс нова назва | Тільки перейменувати, з MySQL 8.0 вперед |
MySQL У версії 8.0 для найпростішого випадку було додано четвертий варіант – перейменування без будь-якого перевизначення.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Тип та ім'я визначено. Залишається питання, де в таблиці розміщується новий стовпець, що контролюється ключовим словом AFTER.
ПІСЛЯ ключового слова
За замовчуванням стовпець, доданий за допомогою ALTER TABLE, розміщується в кінці таблиці. Щоб розмістити його в певній позиції, команда ALTER поєднується з ключовим словом AFTER.
Наведений нижче скрипт додає «date_of_registration» одразу після date_of_birth у таблиці members.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Виконання його для myflixdb, а потім запуск скрипта SHOW COLUMNS дає результат, показаний нижче.
| Поле | тип | Null | ключ | дефолт | Extra |
|---|---|---|---|---|---|
| member_number | int (11) | НЕМАЄ | PRI | NULL | auto_increment |
| повне ім'я | символ(50) | НЕМАЄ | NULL | ||
| пол | varchar(6) | ТАК | NULL | ||
| дата_народження | дата | ТАК | NULL | ||
| дата_реєстрації | дата | ТАК | NULL | ||
| фізична адреса | varchar(255) | ТАК | NULL | ||
| поштова_адреса | varchar(255) | ТАК | NULL | ||
| номер_контакту | varchar(75) | ТАК | NULL | ||
| varchar(255) | ТАК | NULL |
Виділений рядок – це стовпець, доданий після date_of_birth. Ключове слово FIRST працює так само та переміщує новий стовпець на самий початок таблиці.
