Я когда панель управления хостингом делал, решал подобную задачу как описывал выше. У меня была таблица портов, мне нужно было чтобы на одном сервере двум пользователям одновременно выдавались разные порты, я делал update ports set hash=$myHash WHERE owned_by IS NULL LIMIT 1, а далее SELECT * FROM ports WHERE hash=$myHash
Недавно решал схожую задачу, и остановился на решении с блокировками через мемкеш. У селект фор апдейт была какая-то особенность работы. По-моему он лочит в рамках текущей сессии