Sobes.tech
Senior

Was sind pessimistische und optimistische Sperren? Wie erhält man eine pessimistische Sperre ohne den Isolationsgrad zu ändern?

sobes.tech KI

Antwort von AI

Пессимистичные блокировки предполагают, что конфликт при доступе к данным вероятен, поэтому блокировка берётся сразу при чтении или записи, чтобы предотвратить изменения другими транзакциями.

Оптимистичные блокировки исходят из предположения, что конфликты редки, поэтому данные читаются без блокировок, а проверка на конфликт происходит при попытке записи (например, через версионные номера).

Чтобы получить пессимистичную блокировку без изменения уровня изоляции, можно использовать явные блокировки на уровне SQL-запросов, например, в JDBC:

// Получение пессимистичной блокировки на строку
String sql = "SELECT * FROM table WHERE id = ? FOR UPDATE";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();

Здесь FOR UPDATE блокирует выбранные строки для других транзакций, не меняя при этом глобальный уровень изоляции транзакции. Это позволяет реализовать пессимистичную блокировку локально для конкретного запроса.