В настоящее время я создаю сайт электронной коммерции PHP для моего клиента. Все шло гладко, но я наткнулся на контрольно-пропускной пункт, и мне было интересно, могут ли мне помочь эксперты MySQL / PHP. По сути, сайт электронной торговли продает продукт только один раз (это означает, что у него есть только одно количество для каждого товара), что означает, что, как только покупатель проверяет этот товар, он больше не может быть куплен.
Итак, на кассе я должен проверить, есть ли товар на складе. Предполагая, что это будет сайт с большим трафиком, могут быть случаи, когда два или более клиентов будут пытаться оформить заказ одновременно, таким образом, оба смогут купить продукт. Поэтому, чтобы предотвратить это, мой план следующий:
- Выберите ... ДЛЯ ОБНОВЛЕНИЯ для продукта, чтобы заблокировать строку таблицы.
- Сделайте транзакцию электронной торговли (Paypal, authorize.net и т. Д.)
- Если транзакция электронной торговли успешна, вызовите хранимую процедуру MySQL (в которой также есть транзакция SQL) для хранения информации о заказе и т. Д. ИЛИ ROLLBACK в случае неудачи
Возможно ли реализовать этот план? Чтобы выполнить SELECT ... FOR UPDATE, мне нужно запустить транзакцию SQL, но затем я также запускаю еще одну на шаге 3 в хранимой процедуре MySQL. Я не уверен, что произойдет. Кроме того, этот план приведет к тупиковому сценарию?
Извините за длинный вопрос, но любая помощь приветствуется!