MySQL Запит DELETE: як видалити рядок із таблиці
⚡ Розумний підсумок
MySQL Запит DELETE видаляє непотрібні рядки з таблиці та повертає кількість задіяних рядків. У цьому ресурсі пояснюється синтаксис DELETE, фільтрація WHERE, видалення кількох рядків за допомогою IN та безпечніші альтернативи 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 лише тоді, коли сама таблиця більше не потрібна, оскільки це видаляє визначення разом із даними.
