DELETE в Oracle SQL — как удалить строки из таблицы без последствий

🟢 DELETE в Oracle SQL. Введение

Оператор DELETE в Oracle SQL используется для удаления строк из таблицы. Это мощная и потенциально опасная команда — при неправильном применении можно потерять важные данные.

Однако при разумном использовании DELETE становится надёжным инструментом для:

  • очистки устаревших записей

  • поддержки бизнес-логики

  • реализации кнопок «удалить» в интерфейсах

  • регулярного обслуживания данных


🔤 Написание

sql
DELETE FROM имя_таблицы
WHERE условие;

Если не указать WHERE, удалятся все строки!


🔄 Где используется

  • Очистка записей по дате или статусу

  • Реакция на действия пользователя («Удалить заказ»)

  • Синхронизация таблиц

  • Удаление временных данных после обработки

  • В подзапросах и триггерах


🧪 10 Примеров использования DELETE

1️⃣ Удаление по условию

sql
DELETE FROM orders
WHERE status = 'cancelled';

2️⃣ Удаление по диапазону дат

sql
DELETE FROM logs
WHERE log_date < SYSDATE - 90;

Удаляем логи старше 90 дней.


3️⃣ Удаление по подзапросу

sql
DELETE FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id = 2400
);

4️⃣ Удаление всех строк (с осторожностью)

sql
DELETE FROM temp_table;

5️⃣ Ограничение удалений через ROWNUM

sql
DELETE FROM temp_data
WHERE ROWNUM <= 1000;

Удалить первые 1000 строк (не упорядочено).


6️⃣ Удаление с использованием JOIN (через EXISTS)

sql
DELETE FROM orders o
WHERE EXISTS (
SELECT 1 FROM customers c
WHERE c.customer_id = o.customer_id
AND c.status = 'inactive'
);

7️⃣ Удаление с RETURNING INTO (PL/SQL)

plsql
DECLARE
v_name VARCHAR2(50);
BEGIN
DELETE FROM users
WHERE user_id = 101
RETURNING username INTO v_name;
DBMS_OUTPUT.PUT_LINE(‘Удалён пользователь: ‘ || v_name);
END;

8️⃣ Удаление и фиксация (COMMIT)

sql
DELETE FROM cart_items
WHERE session_id = 'abc123';
COMMIT;

9️⃣ Удаление по условию на дату и статус

sql
DELETE FROM sessions
WHERE last_activity < SYSDATE - 1
AND status = 'expired';

🔟 Удаление дубликатов через ROWID

sql
DELETE FROM employees e1
WHERE ROWID > (
SELECT MIN(ROWID)
FROM employees e2
WHERE e1.email = e2.email
);

Удаляем дубликаты по email, оставляя первую запись.


🧩 Заключение

DELETE — это хирургический инструмент в руках разработчика SQL. Он даёт гибкость в управлении данными, но требует внимательности.

💡 Запомни:

  • Всегда используй WHERE, если не хочешь удалить всё

  • Проверь результат с SELECT перед DELETE

  • Используй RETURNING и ROWNUM для точности

  • Сохраняй резервную копию важных таблиц


🔜 Следующая статья:

DEFAULT в Oracle SQL — как задать значение по умолчанию для столбца


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии