Встречается на собеседованиях • сегодня

Работал ли с SELECT FOR UPDATE

Да, работал. SELECT FOR UPDATE — это механизм пессимистичной блокировки в SQL, который позволяет заблокировать выбранные строки для других транзакций до завершения текущей. Используется, когда нужно предотвратить "lost update" или конфликты при параллельном изменении данных.

Пример на Java с JDBC:

java
Connection conn = dataSource.getConnection();
try {
    conn.setAutoCommit(false);
    // Блокируем строку для обновления
    PreparedStatement stmt = conn.prepareStatement(
        "SELECT * FROM accounts WHERE id = ? FOR UPDATE"
    );
    stmt.setInt(1, accountId);
    ResultSet rs = stmt.executeQuery();
    
    if (rs.next()) {
        // Модифицируем данные
        double balance = rs.getDouble("balance");
        // ... выполняем операции
    }
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
} finally {
    conn.close();
}

Важно помнить:

  • Блокировка действует до конца транзакции (commit/rollback)
  • Может вызывать дедлоки, если порядок блокировок не согласован
  • В Spring можно использовать @Transactional с изоляцией SERIALIZABLE или ручное управление через JdbcTemplate
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы