Удаление данных: DELETE FROM — удаление по условию

Что такое DELETE и зачем он нужен? 🔥

DELETE FROM — это SQL-команда для удаления строк из таблицы. Она позволяет: - Удалять одну, несколько или все записи - Точечно чистить данные по условиям - Освобождать место в базе от устаревшей информации

Без DELETE база данных быстро превратилась бы в свалку ненужных данных!

Базовый синтаксис DELETE 📝

Минимальная рабочая команда выглядит так:

DELETE FROM table_name
WHERE condition;

Где: - table_name — имя таблицы для удаления - condition — условие, какие строки удалять (аналогично WHERE в SELECT)

Простой пример удаления 🎯

Допустим, у нас есть таблица orders с завершенными заказами:

DELETE FROM orders
WHERE status = 'completed';

Эта команда удалит все заказы со статусом 'completed'. Точно так же можно удалять клиентов, товары или любые другие данные.

Опасность DELETE без WHERE ☠️

Если забыть условие — удалятся ВСЕ данные из таблицы!

DELETE FROM products;  -- Удалит все товары безвозвратно!

Всегда проверяйте условие перед выполнением DELETE. Это как "выбрать всё + Del" в Excel, только без Ctrl+Z!

Удаление с использованием подзапросов 🧠

Условия могут быть сложными и включать подзапросы:

DELETE FROM employees
WHERE department_id IN (
    SELECT department_id 
    FROM departments 
    WHERE location = 'Remote'
);

Здесь удаляются все сотрудники из удаленных отделов.

Удаление с JOIN (продвинутый уровень) 🚀

В некоторых СУБД можно использовать JOIN в DELETE:

DELETE o
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE c.country = 'Antarctica';

Это удалит все заказы клиентов из Антарктиды.

Ограничения и особенности ⚠️

  1. Триггеры — DELETE может активировать триггеры на удаление
  2. Ограничения — FOREIGN KEY может запретить удаление
  3. Производительность — массовое удаление может быть медленным

Лучшие практики работы с DELETE ✅

  1. Всегда делайте бэкап перед массовыми удалениями
  2. Сначала проверяйте условие SELECT'ом: sql SELECT * FROM table WHERE condition; -- Смотрим что будем удалять DELETE FROM table WHERE condition; -- Затем удаляем
  3. Используйте транзакции для важных операций: sql BEGIN TRANSACTION; DELETE FROM logs WHERE created_at < '2020-01-01'; -- Проверяем результат, затем COMMIT или ROLLBACK

Альтернатива: TRUNCATE TABLE 🚀

Для полной очистки таблицы быстрее использовать:

TRUNCATE TABLE temp_data;

TRUNCATE: - Быстрее DELETE - Не записывает удаление в лог построчно - Сбрасывает автоинкрементные счетчики - Но не работает с условиями!

Как восстановить удаленные данные? ↩️

  1. Из бэкапа (поэтому они так важны!)
  2. Через журнал транзакций (если настроен)
  3. Специальными инструментами восстановления

Удаленные без бэкапа данные чаще всего потеряны навсегда!

Скрыть рекламу навсегда

🧠 Учёба без воды и зубрёжки

Закрытый Boosty с наработками опытного преподавателя.

Объясняю сложное так, чтобы щелкнуло.

🚀 Забрать доступ к Boosty