Вопрос по MYSQL запросам

alerzo

Client
Регистрация
29.02.2012
Сообщения
134
Благодарностей
3
Баллы
18
Здравствуйте
Сделал шаблон по регистрациям на одном сайте. Сами ящики тащу из базы данных на сервере.
Примерная логика такая
Беру почту из базы (запрос с ответом)
Далее удаляю взятую из базы почту скалярным запросом
Далее анализирую почтовый ящик на предмет валидности. если он валидный - добавляю обратно в базу скалярным запросом, если не валидный - ничего не делаю.

Все работает, НО есть одна проблема при большом количестве потоков больше 10 - почему то данные из базы тащатся дублированные..то есть в логе присутствуют одинаковые почтовые ящики..Как решить эту проблему? уже все перерыл, получается mysql может отдавать дубли? Как сделать в одном запросе взятие и удаление строки, которую взяли?

Помогите советом!
 

Platon

Client
Регистрация
26.09.2015
Сообщения
260
Благодарностей
122
Баллы
43
Добавить в таблицу еще один столбец, назвать к примеру статус, если строка не занята пусть будет в столбце 0, если строка взята менять на 1, тогда уже другой поток не подхватит дубль.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113

ol1ver

Client
Регистрация
29.08.2013
Сообщения
332
Благодарностей
82
Баллы
28
Делаем запрос SELECT, тащим ID, далее UPDATE этой записи. Мануалов по mysql много.
 

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 594
Благодарностей
1 014
Баллы
113
добавляете то же поле status enum('active', 'disabled', 'busy','shit')
select * from 'mails' where status='active' order by rand() limit 1;
тут же update status='busy' по полю id
в конце еще раз меняете статус на какой удобнее в результате вы будите понимать где мухи, а где катлеты.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
@ol1ver, в многопотоке
Здравствуйте
Сделал шаблон по регистрациям на одном сайте. Сами ящики тащу из базы данных на сервере.
Примерная логика такая
Беру почту из базы (запрос с ответом)
Далее удаляю взятую из базы почту скалярным запросом
Далее анализирую почтовый ящик на предмет валидности. если он валидный - добавляю обратно в базу скалярным запросом, если не валидный - ничего не делаю.

Все работает, НО есть одна проблема при большом количестве потоков больше 10 - почему то данные из базы тащатся дублированные..то есть в логе присутствуют одинаковые почтовые ящики..Как решить эту проблему? уже все перерыл, получается mysql может отдавать дубли? Как сделать в одном запросе взятие и удаление строки, которую взяли?

Помогите советом!
Здесь обсуждали похожее: https://zennolab.com/discussion/threads/mysql-vzjat-unikalnuju-stroku-i-obnovit-tranzakcija.36704/
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)