Заблокировать запись - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день! Пол дня читаю про блокировки, но пока нормально не получается сделать ( MYSQL InnoDB Есть запрос который выдает ip (таблица sockstable), из тех которые сейчас не в онлайне (таблица onlinesocks) SELECT sockstable.ip FROM sockstable WHERE sockstable.ip NOT IN (SELECT onlinesocks.online FROM onlinesocks) limit 1 После чего этот ip добавляется в таблицу онлайн (onlinesocks) INSERT INTO onlinesocks (online) VALUES ("'+ip+'") Проблема что с базой работает много клиентов, и они мешают друг другу, несколько успевают сделать запрос Select и добавить в onlinesocks. Как заблокировать запись для чтения? И разблокировать её после INSERT. Желательно что бы при SELECT её даже не видно было, что бы клиент брал следующий ip который не онлайн. Придумал такой запрос, но проблема что не могу узнать какой ip он выбрал... sockstable.ip как то можно получить из этого запроса? INSERT INTO onlinesocks (online) SELECT sockstable.ip FROM sockstable WHERE sockstable.ip NOT IN (SELECT onlinesocks.online FROM onlinesocks) limit 1

Решение задачи: «Заблокировать запись»

textual
Листинг программы
INSERT INTO onlinesocks (online) SELECT sockstable.ip FROM sockstable WHERE sockstable.ip NOT IN (SELECT onlinesocks.online FROM onlinesocks) limit 1
SET @lastID := LAST_INSERT_ID()
select online from onlinesocks where id=@lastID

Объяснение кода листинга программы

  1. INSERT INTO onlinesocks (online) SELECT sockstable.ip FROM sockstable WHERE sockstable.ip NOT IN (SELECT onlinesocks.online FROM onlinesocks) - Этот запрос добавляет запись в таблицу onlinesocks, где online равен sockstable.ip, который не присутствует в таблице onlinesocks.
  2. limit 1 - Ограничивает выборку одной записью.
  3. SET @lastID := LAST_INSERT_ID() - Эта команда сохраняет в переменную @lastID идентификатор последней вставленной записи.
  4. select online from onlinesocks where id=@lastID - Этот запрос выбирает значение online из таблицы onlinesocks, где id равен значению переменной @lastID.

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы