Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Использование транзакций


Автор: mannyramirez 16.9.2010, 23:09
Имеется некая таблица MySQL в которой есть  некие  записи,  пусть  это
будет таблица "контакты". Имеется ряд операторов, которые  работают  с
этой таблицей, им постоянно автоматически выбирается свободный контакт
из таблицы "контакты".

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

Решается ли эта задачка с использованием транзакций MySQL или нужно копать в другом направлении?

Автор: vasac 17.9.2010, 11:42
Можно транзакциями, можно блокировкой таблиц.

Либо не так чтобы очень правильно, но иногда проще - сделать у контактов поле `operator` где хранится оператор, который работает с контактом или NULL если он свободен.

Потом как-то так:
Код

UPDATE `contacts` SET `operator`=$operatorId WHERE `operator` IS NULL LIMIT 1; -- заблокировали контакт для оператора
SELECT * FROM `contacts` WHERE `operator`=$operatorId LIMIT 1; -- получили его

Автор: xoslv 5.10.2010, 13:03
Цитата(vasac @ 17.9.2010,  11:42)
Можно транзакциями, можно блокировкой таблиц.

При использовании транзакций, во время её выполнения таблица будет заблокирована и не доступна для других пользователей, запросы будут вставать в очередь и ждать пока отработает транзакция.
при 10 запросах в секунду это не критично. но для серьёзной базы, я бы искал другой способ...
Ну и приведённый выше пример тоже не так плох.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)