Ответ
Для удаления строк данных используется оператор DELETE. Ключевое правило — всегда использовать условие WHERE, если не требуется очистить всю таблицу.
Базовый синтаксис:
DELETE FROM table_name
WHERE condition;
Практические примеры:
-- Удалить конкретную запись
DELETE FROM users WHERE id = 123;
-- Удалить записи по нескольким критериям
DELETE FROM orders
WHERE status = 'cancelled'
AND created_at < '2023-01-01';
-- Удалить с использованием подзапроса
DELETE FROM cart_items
WHERE product_id IN (SELECT id FROM products WHERE discontinued = TRUE);
Best Practices и меры предосторожности:
- Сначала проверь (
SELECT), потом удаляй (DELETE).-- Проверить, какие строки будут удалены SELECT * FROM logs WHERE severity = 'DEBUG' AND age(created_at) > INTERVAL '90 days'; -- Если результат корректен, выполнить удаление DELETE FROM logs WHERE severity = 'DEBUG' AND age(created_at) > INTERVAL '90 days'; -
Используй транзакции в production. Это позволяет откатить изменения в случае ошибки.
BEGIN TRANSACTION; -- или START TRANSACTION; DELETE FROM temp_sessions; -- Проверить результат... ROLLBACK; -- Откатить изменения -- COMMIT; -- Подтвердить изменения - Для полной очистки таблицы иногда эффективнее использовать
TRUNCATE TABLE, который быстрее и не пишет в журнал удаление каждой строки (но его нельзя откатить в транзакции в некоторых СУБД).TRUNCATE TABLE audit_trail;