Как правильно удалять данные из базы данных с помощью SQL?

«Как правильно удалять данные из базы данных с помощью SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для удаления строк данных используется оператор 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 и меры предосторожности:

  1. Сначала проверь (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';
  2. Используй транзакции в production. Это позволяет откатить изменения в случае ошибки.

    BEGIN TRANSACTION; -- или START TRANSACTION;
    
    DELETE FROM temp_sessions;
    -- Проверить результат...
    
    ROLLBACK; -- Откатить изменения
    -- COMMIT; -- Подтвердить изменения
  3. Для полной очистки таблицы иногда эффективнее использовать TRUNCATE TABLE, который быстрее и не пишет в журнал удаление каждой строки (но его нельзя откатить в транзакции в некоторых СУБД).
    TRUNCATE TABLE audit_trail;