Я проектирую базу данных, которая будет использоваться для хранения запросов для дальнейшей обработки.Когда происходит такая обработка, мне нужно выполнить хранимую процедуру для извлечения (SELECT
) из представления тех запросов, которые можно обрабатывать , теперь и обновлять (UPDATE
) соответствующие записи с флагом, указывающим, что они были получены потоком моего приложения.Однако, так как это будет сценарий с высоким уровнем параллелизма, могут произойти две вещи:
1) Новые запросы могут быть размещены так же, как я считываю записи из базы данных;
2) То же самоезапросы могут быть получены различными потоками моего приложения, если второй поток обращается к данным между моими операторами SELECT
и UPDATE
.
Проблема 1) на самом деле не является проблемой, так как эти запросы будут получены и обработаныболее поздним потоком, обращающимся к данным.Проблема, конечно, вторая ситуация, которую я должен избегать в меру своих возможностей.Как на самом деле убедиться, что никакой другой поток, обращающийся к базе данных, не может читать записи из используемого представления , пока оператор UPDATE
не зафиксирован, сохраняя, однако, возможность добавлять строки в соответствующие таблицы (ситуация 1))?