У меня есть таблица v_ext в MySQL с движком InnoDB:
- id: первичный ключ
- код: предварительно сгенерированный список кодов (скажем, 1000 кодов генерируются случайным образом)
- user_id: первоначально NULL
Когда пользователь покупает товар, он получает код. Мне нужно обновить таблицу, чтобы заполнить столбец user_id. У меня есть два варианта:
START TRANSACTION;
SELECT id FROM v_ext WHERE user_id IS NULL LIMIT 1 FOR UPDATE; -- return id 54 for ex.
UPDATE v_ext SET user_id=xxx WHERE id=54;
COMMIT;
или
UPDATE v_ext SET user_id=xxx WHERE user_id IS NULL LIMIT 1;
Является ли второй вариант безопасным, если у меня одновременно есть тысячи пользователей? Если да, правильно ли предположить, что этот второй вариант лучше для производительности, так как ему нужен только один запрос?