MYSQL – ИЗМЕНИТЬ, УДАЛИТЬ, ПЕРЕИМЕНОВАТЬ, ИЗМЕНИТЬ

⚡ Умное резюме

ALTER, DROP, RENAME и MODIFY — это... MySQL Команды, изменяющие структуру базы данных после ее использования. Они добавляют, удаляют, переименовывают и переопределяют объекты, такие как таблицы и столбцы, не удаляя уже сохраненные строки.

  • 🇧🇷 Команда ALTER: Команда ALTER TABLE переопределяет уже существующий объект, поэтому рабочая схема автоматически принимает новые требования без перестроения.
  • ДОБАВИТЬ КОЛОНКУ: Команда ALTER TABLE ADD COLUMN добавляет поле, при этом существующие строки сохраняют все ранее присвоенные им значения.
  • 🇧🇷 Команда DROP: Команда DROP удаляет безвозвратно: базу данных, таблицу или отдельный столбец, созданный с помощью команды ALTER TABLE DROP COLUMN.
  • 🔁 Команда ПЕРЕИМЕНОВАТЬ: Команда RENAME TABLE изменяет только имя таблицы, при этом данные внутри неё не теряются.
  • 🇧🇷 ИЗМЕНЕНИЕ Ключевое слово: Оператор CHANGE переименовывает столбец и переопределяет его тип и ограничения в одном операторе, поэтому требуются оба имени столбца.
  • 🧩 ИЗМЕНИТЬ Ключевое слово: Функция MODIFY изменяет тип и ограничения, сохраняя при этомping Название — более безопасный вариант для редактирования только текста.
  • 📍 ПОСЛЕ Ключевое слово: Функция AFTER размещает вновь добавленный столбец в выбранном месте, а не в конце таблицы.

MySQL Изменить, удалить, переименовать и модифицировать

Что такое команда ALTER в MySQL?

ALTER Эта команда изменяет существующую базу данных, таблицу, представление или другой объект базы данных, который необходимо изменить в течение жизненного цикла базы данных. Она позволяет схеме развиваться после того, как она уже была создана и заполнена данными.

Требования бизнеса редко остаются неизменными, и проектирование базы данных должно меняться вместе с ними. Предположим, что проект базы данных 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
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
полные имена варчар(350) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,

💡 Примечание к int(11): Число в скобках обозначает только ширину экрана. MySQL В версии 8.0.17 эта функция была признана устаревшей для целочисленных типов, поэтому современный сервер отображает этот столбец просто как IntРазмер хранилища остаётся неизменным.

Приведённый ниже скрипт добавляет новое поле в таблицу участников.

ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);

Выполнение этого скрипта в базе данных myflixdb добавляет в таблицу members столбец с именем credit_card_number и типом данных VARCHAR. Повторный запуск скрипта SHOW COLUMNS дает следующий результат.

Поиск Тип Значение Null Основные По умолчанию Дополнительно - Extra
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
полные имена варчар(350) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,
Номер кредитной карты варчар(25) ДА NULL,

Выделенная строка подтверждает, что номер кредитной карты (credit_card_number) был добавлен в таблицу участников, а данные, уже содержащиеся в других столбцах, не были затронуты этим добавлением.

Добавление столбца — это только половина дела. Схема также должна удалить ненужные объекты, и именно для этого предназначена команда DROP.

Что такое команда DROP в... MySQL?

Команда DROP удаляет объект безвозвратно. Она используется для

  1. Удалить базу данных из MySQL сервер.
  2. Удаление объекта, такого как таблица или столбец, из базы данных.

⚠️ Предупреждение: Операция 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
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
полные имена варчар(350) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(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 позволяет вам

  1. Изменить название столбца
  2. Измените тип данных столбца.
  3. Измените ограничения столбцов.

Рассмотрим пример. Поле full_names в таблице members имеет тип данных varchar с шириной 350, что подтверждает приведенный ниже скрипт.

SHOW COLUMNS FROM `members`;
Поиск Тип Значение Null Основные По умолчанию Дополнительно - Extra
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
полные имена варчар(350) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,

Предположим, требование состоит в том, чтобы

  1. Измените название поля с «full_names» на «fullname».
  2. Измените тип данных на символьный с шириной 250.
  3. Добавьте ограничение NOT NULL

Все три изменения вносятся одним оператором CHANGE.

ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;

При выполнении скрипта SHOW COLUMNS на базе данных myflixdb получается следующий результат.

Поиск Тип Значение Null Основные По умолчанию Дополнительно - Extra
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
ФИО символ (250) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,

Теперь столбец называется fullname, содержит char(250) и отклоняет значения NULL.

ИЗМЕНИТЬ ключевое слово

Ключевое слово MODIFY позволяет вам

  1. Измените тип данных столбца.
  2. Измените ограничения столбцов.

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

Приведённый ниже скрипт изменяет ширину поля «полное имя» с 250 до 50.

ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;

При выполнении скрипта SHOW COLUMNS на базе данных myflixdb результат показан ниже.

Поиск Тип Значение Null Основные По умолчанию Дополнительно - Extra
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
ФИО символ (50) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,

⚠️ Предупреждение: Сужение столбца приводит к обрезке данных, которые больше не помещаются. Любое имя длиннее 50 символов обрезается этим оператором, поэтому проверьте самое длинное существующее значение с помощью ВЫБОР Запрос перед уменьшением размера поля.

ИЗМЕНИТЬ vs МОДИФИЦИРОВАТЬ vs ПЕРЕИМЕНОВАТЬ СТОЛБЕЦ

Эти три ключевых слова частично совпадают, и наиболее распространенной причиной ошибок в этой области является выбор неправильного из них. В таблице ниже они представлены рядом.

Ключевое слово Переименовывает столбец Изменяет тип и ограничения. Требуется старое имя Типичное использование
ИЗМЕНЕНИЕ Да Да Да, плюс новое название. Переименовать и переопределить в одном предложении.
ИЗМЕНИТЬ Нет Да Имя было дано один раз. Расширить, сузить или перепечатать колонку
ПЕРЕИМЕНОВАТЬ СТОЛБЕЦ Да Нет Да, плюс новое название. Переименовать только, из 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» в таблице участников.

ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;

При выполнении скрипта SHOW COLUMNS на базе данных myflixdb результат показан ниже.

Поиск Тип Значение Null Основные По умолчанию Дополнительно - Extra
Количество членов Int (11) НЕТ PRI NULL, автоматическое приращение
ФИО символ (50) НЕТ NULL,
пол варчар(6) ДА NULL,
Дата рождения даты ДА NULL,
дата_регистрации даты ДА NULL,
Физический адрес варчар(255) ДА NULL,
почтовый_адрес варчар(255) ДА NULL,
контактный_номер варчар(75) ДА NULL,
e-mail варчар(255) ДА NULL,

Выделенная строка — это столбец, добавленный после date_of_birth. Ключевое слово FIRST работает аналогично и перемещает новый столбец в самое начало таблицы.

Часто задаваемые вопросы (FAQ)

Нет. Операторы DDL, такие как ALTER, DROP и RENAME, неявно фиксируют изменения. MySQLТаким образом, открытая транзакция не может отменить их. Единственный способ вернуться к исходному состоянию — восстановление из резервной копии.

Это зависит от изменений. Многие изменения в InnoDB выполняются в режиме онлайн и допускают одновременное чтение и запись, в то время как другие копируют всю таблицу и блокируют запись. Добавьте условия ALGORITHM и LOCK, чтобы указать, какие изменения вы готовы принять.

DROP удаляет сам объект. TRUNCATE очищает таблицу, но сохраняет её структуру. УДАЛИТЬ Удаляет выбранные строки и может быть отфильтрован с помощью условия WHERE.

Обычно да. Искусственные интеллекты, встроенные в такие приложения, как... MySQL Верстак Преобразуйте запрос типа «добавить столбец с возможностью значения NULL после даты рождения» в допустимый синтаксис. RevПеред выполнением проверьте сгенерированное выражение на соответствие действующей схеме.

Лишь частично. Инструменты анализа на основе ИИ выявляют очевидные риски, такие как удаленный столбец, по-прежнему имеющий имя в запросе, или суженный тип, который обрезает данные. Они не могут увидеть каждый запрос, поэтому по-прежнему необходим предварительный запуск.

Подведем итог этой публикации следующим образом: