Использовали ли вы оператор DROP TABLE в продакшене?

«Использовали ли вы оператор DROP TABLE в продакшене?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В продакшене прямой DROP TABLE следует избегать из-за риска безвозвратной потери данных. В моей практике он применялся исключительно в управляемых сценариях:

  1. В тестовых средах для очистки временных таблиц.
  2. В миграциях (migrations), где удаление устаревших таблиц было частью продуманного плана изменений схемы БД.

Безопасные альтернативы для удаления данных:

  • TRUNCATE TABLE — быстрая очистка всей таблицы с сохранением структуры.
  • DELETE FROM table WHERE ... — выборочное удаление с условием и возможностью отката транзакции (ROLLBACK).

Пример безопасного подхода на Java с использованием DELETE:

// Удаление записей с явным условием и логированием
String sql = "DELETE FROM user_sessions WHERE last_activity < ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now().minusMonths(6)));
    int rowsDeleted = pstmt.executeUpdate();
    LOGGER.info("Deleted {} expired sessions", rowsDeleted);
    connection.commit(); // Фиксация только после успешного выполнения
}

Ключевой принцип: Любая операция удаления должна быть идемпотентной, контролируемой и иметь четкий критерий отбора.