Заблокировать запись - 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
Объяснение кода листинга программы
INSERT INTO onlinesocks (online) SELECT sockstable.ip FROM sockstable WHERE sockstable.ip NOT IN (SELECT onlinesocks.online FROM onlinesocks)
- Этот запрос добавляет запись в таблицуonlinesocks
, гдеonline
равенsockstable.ip
, который не присутствует в таблицеonlinesocks
.limit 1
- Ограничивает выборку одной записью.SET @lastID := LAST_INSERT_ID()
- Эта команда сохраняет в переменную@lastID
идентификатор последней вставленной записи.select online from onlinesocks where id=@lastID
- Этот запрос выбирает значениеonline
из таблицыonlinesocks
, гдеid
равен значению переменной@lastID
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д