Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Параллельный выбор данных

12K
23 июля 2005 года
donezk
4 / / 23.07.2005
Небольшой Callcenter. Агенты при помощи клиентской программы получают контактные телефоны.
Само собой разумеется, различным агентам не должны попасть одинаковые телефоны одновремменно. Хорошо.

Выбираем строку из таблицы, запираем ее(id агента в столбец, скажем "lock_agent_id") и говорим этот агент ее выбрал.

Результат разговора сохраняется и телефон больше не выбирается. Тут все нормально.

Но, сам выбор: допустим

BEGIN
SELECT phone_id,name,phone INTO @phone_id,@name,@phone
FROM phones
WHERE lock_agent_id IS NULL.... LIMIT 1 FOR UPDATE;
UPDATE phones SET lock_agent_id=@agent_id WHERE phone_id = @phone_id;
...
RETURN
END

Агенты не получат одновременно один и тот же номер, но если одновременно несколько агентов выбирают из таблицы, то

один из них действительно получает номер, а остальные пустую строку.

Кажется, выход только один,- запереть всю таблицу (LOCK TABLE) во время выбора. Правда, тогда всем остальным

придется ждать, пока первый закончит операцию, потом другой и так далее.

Нужеле нет другого выхода? Мне кажется, что это стандартная проблема, но к сожалению, я с ней столкнулся впервые.

Может быть кто-то подскажет. Заранее благодарен.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог