Есть таблица в Innodb с полями id (автоинкрементное), login, pass, used (значение 1 или 0)
Шаблон работает во многопотоке, нужно запустить шаблон с 10 потоками, взять уникальный логин и пароль, обновить поле, что он используется в данный момент.
Написал процедуру, но что-то меня смущает:
1. Нужно ли использовать autocommit в 0 а потом возвращать 1?
2. FOR UPDATE - уместно?
3. Все верно?
Протестировал на 10 потоках на 1000 строках из таблицы, вроде все время берет уникальные значения.
Шаблон работает во многопотоке, нужно запустить шаблон с 10 потоками, взять уникальный логин и пароль, обновить поле, что он используется в данный момент.
Написал процедуру, но что-то меня смущает:
1. Нужно ли использовать autocommit в 0 а потом возвращать 1?
2. FOR UPDATE - уместно?
3. Все верно?
Протестировал на 10 потоках на 1000 строках из таблицы, вроде все время берет уникальные значения.
Код:
SET autocommit=0;
START TRANSACTION;
SET @peremennaia:= (SELECT full_login FROM mail WHERE used = 0 ORDER BY RAND() LIMIT 1 FOR UPDATE);
SELECT id, full_login, password FROM mail WHERE full_login = @peremennaia;
UPDATE mail SET used = 1 WHERE full_login = @peremennaia;
COMMIT;
SET autocommit=1;