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 сервер для видалення рядків з іменованої таблиці.
  • [Умова WHERE] є необов'язковим і використовується для застосування фільтра, який обмежує кількість рядків, на які впливає запит DELETE.

Якщо ДЕ ЗАКЛАД не використовується в MySQL ВИДАЛИТИ запит, потім всі рядки у вказаній таблиці будуть видалені.

⚠️ Попередження: Спочатку запустіть фільтр як SELECT. Якщо він повертає саме ті рядки, які ви хочете видалити, відповідний DELETE безпечний. Повний синтаксис задокументовано в MySQL Посібник з видалення оператора.

Приклад 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 назву директор year_released category_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 зразок фільму анонімний NULL 8
20 фільм 3 року Джон Браун 1920 8

Крок 2: Видалення одного рядка

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

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

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

Давайте тепер перевіримо поточний стан таблиці фільмів.

SELECT * FROM `movies`;
movie_id назву директор year_released category_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 зразок фільму анонімний NULL 8
20 фільм 3 року Джон Браун 1920 8

ПРИМІТКА:

  • Фільм з ідентифікатором 18 більше не повертається в наборі результатів запиту.
  • Ви не можете видалити окремий стовпець з таблиці за допомогою оператора DELETE. Цей оператор видаляє весь рядок. Щоб очистити одне поле, використовуйте оператор ОНОВЛЕННЯ запиту що встановлює значення стовпця на NULL.

Крок 3: Видалення кількох рядків з IN

Припустимо, у нас є список фільмів, які ми хочемо видалити. Замість того, щоб виконувати один оператор для кожного рядка, ми можемо поєднати речення WHERE з оператором IN.

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

Виконання наведеного вище скрипта видаляє фільми з ідентифікаторами 20 та 21 з нашої таблиці фільмів за один прохід.

ВИДАЛИТИ проти УБІЧЕННЯ проти ВСТАВЛЕННЯ MySQL

ВИДАЛИТИ – це не єдиний спосіб видалити дані з MySQLПочатківці часто вдаються до неї, коли швидша команда підійде краще, тому в таблиці нижче порівнюються три команди видалення.

особливість DELETE ЗРУЧИТИ DROP
Тип команди DML DDL DDL
ДЕ ЗАКЛАД Підтриманий Не підтримується Не підтримується
Що видалено Вибрані рядки Усі рядки Рядки та структура таблиці
Скасування Можливо всередині транзакції Неможливо (неявний коміт) Неможливо (неявний коміт)
AUTO_INCREMENT Лічильник зберігається Лічильник скидається до початкового значення Лічильник знімається разом зі столом
Швидкість на великих столах Повільно (ряд за рядком) Дуже швидко Дуже швидко

Використовуйте DELETE, коли вам потрібен фільтр або можливість відкату. Використовуйте TRUNCATE TABLE коли потрібно швидко очистити таблицю та скинути її лічильник AUTO_INCREMENT. Використовуйте DROP лише тоді, коли сама таблиця більше не потрібна, оскільки це видаляє визначення разом із даними.

Поширені запитання

Тільки всередині відкритої транзакції. Виконайте START TRANSACTION, DELETE, а потім ROLLBACK, щоб скасувати це. Після COMMIT або з увімкненим автофіксацією рядки зникають, і їх можна відновити лише з резервної копії.

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

Безпечний режим оновлення ввімкнено за замовчуванням у MySQL ВерстакВін відхиляє будь-які операції DELETE, речення WHERE яких не використовує ключовий стовпець, запобігаючи випадковому видаленню всієї таблиці. Вимкніть його в розділі «Редагувати» > «Налаштування» > «Редактор SQL».

Так. Помічники ШІ перекладають запит простою англійською мовою в синтаксис DELETE та можуть пояснити речення WHERE. Завжди спочатку перевіряйте згенерований фільтр на відповідність SELECT, оскільки модель ШІ не може бачити ваші дані в реальному часі.

Ні. Нехай штучний інтелект напише чернетку оператора, але спочатку виконайте його самостійно на резервній копії або проміжній копії. Відсутність речення WHERE видаляє кожен рядок, і жоден інструмент штучного інтелекту не може скасувати це після завершення транзакції.

Підсумуйте цей пост за допомогою: