Re[4]: Семафор для работы с БД
От: MasterZiv СССР  
Дата: 04.04.08 06:37
Оценка:
lord0n пишет:

> На сколько мне известно блокировки в БД охватывают весь запрос


Это — ошибочное мнение.

> То есть если я напишу

>
> select * from QUEUE where InWork = 0 and Result is null
> то у меня заблокируется вся очередь, а не её первый элемент (который мне
> и нужен)

Нет, неверно. Может заблокироваться либо строка, либо страница,
либо вся таблица. Конкретика зависит от многих-многих вещей.

> мне нужно какимто образом получить первый элемент и заблокировать его на

> то время пока я с ним работаю
> как это сделать я не знаю

begin transaction

select * from QUEUE where <нужная строка> for update
-- или, если БД не поддерживает SELECT..FOR UPDATE
update QUEUE set some_field = some_field where <Нужная строка>

....


commit/rollback
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.