Рейтинг:
0
Wendelius
Один из способов - использовать SELECT FOR UPDATE
структура для блокировки записей во время выбора и снятия блокировок при COMMIT
или ROLLBACK
Для получения дополнительной информации см. MySQL :: MySQL 8.0 Справочное Руководство :: 15.7.2.4 Блокировка Считывает[^]
Если вам нужно расширить контроль за пределы границ транзакции, вы можете использовать TIMESTAMP
тип данных для реализации оптимистического управления параллелизмом. О метке времени см. С mysql :: mysql с 8.0 справочник :: 11.2.2 дата, DateTime и timestamp типы[^]
Для примера оптимистичного параллелизма вы можете обратиться к Как предотвратить случайную перезапись измененных данных транзакцией[^Несмотря на то, что статья написана для SQL Server, принцип остается тем же самым.
РЕДАКТИРОВАТЬ
Снова посмотрев на этот вопрос, я почувствовал неуверенность в том, используете ли вы MySQL или SQL Server. Если вы используете Microsoft SQL Server, вы можете заблокировать выбранные записи, например, с помощью WITH UPDLOCK
намекните в своем запросе, чтобы убедиться, что записи заблокированы независимо от настроек параллелизма. Видеть Табличные подсказки (Transact-SQL) - SQL Server | Microsoft Docs[^]
А в случае SQL Server статья должна быть точной.
0x01AA
Это очень интересное решение. Есть 5.
ZurdoDev
Однако, если есть много источников, как упоминает ОП, то вы можете создать ожидания, делая это. Хотя SQL уже блокирует запись при ее обновлении, так что я не уверен, что это что-то делает, не так ли?
Я действительно не чувствую, что ОП хорошо объяснил себя. Я чувствую, что на самом деле происходит что-то еще.
Wendelius
Блокировка-это в основном ожидание в очереди, поэтому я бы предпочел использовать существующий механизм, а не создавать пользовательский.
Разница в блокировке данных во время select заключается в типе блокировок. Когда выбор запущен и требуется блокировка обновления, никто другой не может обновить эту конкретную запись до тех пор, пока вы не отпустите блокировку. При поведении по умолчанию, даже если вы выбрали данные, кто-то другой может начать их обновление и запросить X lock, так как во время выбора приобретается только S lock.
Вполне возможно, что ОП упустил что-то важное. Если это так, будем надеяться, что они дадут больше информации :)