MySQL Запрос DELETE: как удалить строку из таблицы

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

MySQL Запрос DELETE удаляет из таблицы строки, которые больше не нужны, и возвращает количество затронутых строк. В этом ресурсе объясняется синтаксис DELETE, фильтрация WHERE, удаление нескольких строк с помощью IN, а также более безопасные альтернативы TRUNCATE и DROP.

  • 🇧🇷 Основное утверждение: Оператор DELETE FROM `table_name` [WHERE condition] удаляет целые строки и возвращает количество удаленных строк.
  • ⚠️ Опущено ГДЕ: Если не использовать условие WHERE, удалятся все строки в таблице, поэтому всегда выполняйте фильтрацию перед выполнением запроса.
  • 🎯 TargetУдаление: Оператор WHERE `movie_id` = 18 удаляет одну запись, а оператор WHERE `movie_id` IN (20,21) удаляет несколько записей в одном операторе.
  • 🔁 Необратимое действие: Удаленные данные невозможно восстановить без резервной копии, поэтому перед выполнением команды DELETE сделайте резервную копию базы данных.
  • 📊 Область видимости на уровне строк: Команда DELETE удаляет только целые строки; для очистки значения в одном столбце требуется команда UPDATE с параметром NULL.
  • Удалить, обрезать, удалить: Команда DELETE фильтрует строки, TRUNCATE мгновенно очищает таблицу, а DROP удаляет саму структуру таблицы.

Что такое запрос DELETE?

MySQL УДАЛИТЬ Оператор DELETE используется для удаления строк, которые больше не нужны, из таблицы базы данных. Он удаляет всю строку из таблицы и возвращает количество удаленных строк. Оператор DELETE полезен, когда необходимо очистить временные или устаревшие данные из базы данных.

Запрос DELETE в MySQL Позволяет удалить более одной строки из таблицы за одно выполнение. Это особенно полезно при удалении большого количества строк из таблицы базы данных.

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

Как удалить строку в MySQL

После того, как цель утверждения стала ясна, следующим шагом является синтаксис. Чтобы удалить строку в MySQLиспользуется оператор DELETE FROM:

DELETE FROM `table_name` [WHERE condition];

ЗДЕСЬ:

  • Удалить из `table_name` сообщает MySQL Сервер должен удалить строки из указанной таблицы.
  • [ГДЕ условие] Этот параметр является необязательным и используется для применения фильтра, ограничивающего количество строк, затрагиваемых запросом DELETE.

Если же линия индикатора Предложение WHERE не используется в MySQL Удалить запрос, затем ВСЕ Строки в данной таблице будут удалены.

⚠️ Предупреждение: Сначала выполните фильтр как оператор SELECT. Если он возвращает именно те строки, которые вы хотите удалить, то соответствующий оператор DELETE будет безопасным. Полный синтаксис описан в документации. MySQL Оператор DELETE (ручное управление).

Пример MySQL Удалить запрос

В следующем разделе создается небольшой набор данных, а затем из него удаляются данные.

Шаг 1: Вставьте пример данных

Прежде чем перейти к более подробному обсуждению оператора SQL DELETE, давайте добавим несколько примеров данных в таблицу movies для работы.

INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7);
INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8);
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);

Выполнение приведенного выше скрипта добавляет три (3) фильма в таблицу фильмов. Прежде чем продолжить, давайте перечислим все фильмы в нашей таблице.

SELECT * FROM `movies`;

Выполнение приведенного выше скрипта дает следующие результаты. Три вновь вставленные строки выделены.

Movie_id название директор год_выпущено ид_категории
1 Пираты Карибского моря 4 Роб Маршалл 2011 1
2 Забыть Сару Маршал Николас Столлер 2008 2
3 X-Men NULL, 2008 NULL,
4 Code Имя Черный Эдгар Джимз 2010 NULL,
5 Папины маленькие девочки NULL, 2007 8
6 Ангелы и демоны NULL, 2007 6
7 Да Винчи Code NULL, 2007 6
9 Honey moonERS Джон Шульц 2005 8
16 67% Виновен NULL, 2012 NULL,
18 Великий диктатор Чарли Чаплин 1940 7
19 пример фильма Anonymous NULL, 8
20 фильм 3 Джон Браун 1920 8

Шаг 2: Удаление одной строки

Предположим, видеотека Myflix больше не хочет сдавать в аренду фильм «Великий диктатор» и желает удалить его из базы данных. Идентификатор фильма — 18, поэтому приведенный ниже скрипт удаляет эту строку.

DELETE FROM `movies` WHERE `movie_id` = 18;

Выполнение приведенного выше сценария в MySQL Верстак При обращении к базе данных Myflix фильм с идентификатором 18 удаляется из таблицы.

Давайте теперь проверим текущее состояние таблицы фильмов.

SELECT * FROM `movies`;
Movie_id название директор год_выпущено ид_категории
1 Пираты Карибского моря 4 Роб Маршалл 2011 1
2 Забыть Сару Маршал Николас Столлер 2008 2
3 X-Men NULL, 2008 NULL,
4 Code Имя Черный Эдгар Джимз 2010 NULL,
5 Папины маленькие девочки NULL, 2007 8
6 Ангелы и демоны NULL, 2007 6
7 Да Винчи Code NULL, 2007 6
9 Honey moonERS Джон Шульц 2005 8
16 67% Виновен NULL, 2012 NULL,
19 пример фильма Anonymous NULL, 8
20 фильм 3 Джон Браун 1920 8

ПРИМЕЧАНИЕ:

  • Фильм с идентификатором 18 больше не отображается в результатах запроса.
  • С помощью оператора DELETE нельзя удалить отдельный столбец из таблицы. Оператор удаляет всю строку целиком. Чтобы очистить одно поле, используйте оператор DELETE. ОБНОВИТЬ запрос Это устанавливает значение столбца равным NULL.

Шаг 3: Удаление нескольких строк с оператором IN

Допустим, у нас есть список фильмов, которые мы хотим удалить. Вместо того чтобы выполнять отдельное выражение для каждой строки, мы можем объединить условие WHERE с оператором IN.

DELETE FROM `movies` WHERE `movie_id` IN (20,21);

Выполнение приведенного выше скрипта удаляет фильмы с идентификаторами 20 и 21 из нашей таблицы фильмов за один проход.

Удалить, обрезать, перетащить MySQL

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

Характеристика УДАЛИТЬ ОБРЕЗАТЬ DROP
Тип команды DML DDL DDL
Предложение WHERE Поддержанный Не поддерживается Не поддерживается
Что удаляется Выбранные строки Все строки Структура строк и таблиц
Отмена Возможно внутри транзакции Невозможно (неявное подтверждение) Невозможно (неявное подтверждение)
АВТОМАТИЧЕСКОЕ ПРИРАЩЕНИЕ Счетчик сохранен Счетчик сбрасывается до начального значения. Прилавок убирается вместе со столом.
Скорость работы за большими столами Медленно (ряд за рядом) Очень быстро Очень быстро

Используйте клавишу DELETE, когда вам нужен фильтр или возможность отката. ОБРЕЗАТЬ ТАБЛИЦУ Используйте команду DROP, когда вам нужно быстро очистить таблицу и сбросить счетчик AUTO_INCREMENT. DROP следует использовать только тогда, когда сама таблица больше не нужна, поскольку она удаляет определение вместе с данными.

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

Только внутри открытой транзакции. Выполните команду START TRANSACTION, удалите запись (DELETE), затем выполните команду ROLLBACK, чтобы отменить её. После команды COMMIT или при включенной функции автокоммита строки будут удалены, и восстановить их можно только с помощью резервной копии.

Используйте операцию DELETE для нескольких таблиц. РЕГИСТРАЦИЯУкажите названия обеих таблиц перед ключевым словом FROM. В качестве альтернативы, определите внешний ключ с помощью ON DELETE CASCADE, чтобы дочерние строки автоматически удалялись при удалении родительской строки.

В режиме безопасного обновления по умолчанию включена функция безопасного обновления. MySQL ВерстакЭта функция отклоняет любые запросы DELETE, в условии WHERE которых не используется ключевой столбец, предотвращая случайное удаление всей таблицы. Отключите её в меню «Редактировать» > «Настройки» > «Редактор SQL».

Да. Искусственный интеллект-помощники переводят простой запрос на английский язык в синтаксис DELETE и могут объяснить условие WHERE. Всегда сначала проверяйте сгенерированный фильтр на соответствие оператору SELECT, поскольку модель ИИ не может видеть ваши данные в реальном времени.

Нет. Пусть ИИ составит запрос, но сначала выполните его самостоятельно на резервной или промежуточной копии. Отсутствие условия WHERE удаляет все строки, и ни один инструмент ИИ не сможет отменить это после подтверждения транзакции.

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