@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn Жесть, а зачем всю таблицу то лочить? Я привел пример с полем, когда вообще ничего не лочится. Просто запись выподает из выборки остальных запросов...
Ну оно вот так работает, точнее работало когда то. Сейчас не могу ручаться на 100%. В сфере применения BAS это будет незаметно, так как лок таблицы на наносекунду по время выполнения запроса не повлияет ни на что.
Таблица лочится ТОЛЬКО на время выполнения одного запроса, чтобы взять запись и поменять у нее поле. Как раз, чтобы другие потоки не схватили ее же. Вариантов тут нет, надо лочить.
Может сейчас лочится только конкретная запись, не вся таблица. Пойду как я сам доки почитаю.
Ты дал вариант, при котором другие потоки все таки могут схватить нужную запись.
Поток 1:
- взял запись
- изменил у нее флаг
А между этими пунктами поток 2 успел схватить ее. Это все ненадежно и добавляет свою логику, вместо SELECT FOR UPDATE, который был придуман ради этого.