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

Как работает SELECT FOR UPDATE

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

Пример в Java с JDBC:

java
Connection conn = DriverManager.getConnection(...);
conn.setAutoCommit(false);

try {
    // Блокируем строку с id = 1
    PreparedStatement stmt = conn.prepareStatement(
        "SELECT * FROM accounts WHERE id = 1 FOR UPDATE");
    ResultSet rs = stmt.executeQuery();
    
    // Работаем с заблокированной строкой
    if (rs.next()) {
        int balance = rs.getInt("balance");
        // Обновляем баланс
        PreparedStatement update = conn.prepareStatement(
            "UPDATE accounts SET balance = ? WHERE id = 1");
        update.setInt(1, balance + 100);
        update.executeUpdate();
    }
    
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
}

Особенности:

  1. Блокировка снимается при commit/rollback
  2. Может вызвать deadlock, если несколько транзакций блокируют ресурсы в разном порядке
  3. В некоторых СУБД (PostgreSQL) можно добавить NOWAIT для немедленного отказа при невозможности блокировки
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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