Не надо это именно делать через транзакции.
На каждую "покупку" создаешь заявку в отдельной таблице "бронь".
При поступлении оплаты - продаешь билет, удаляешь запись из заявок.
С определенной периодичностью проходишь по этой таблице, удаляешь устаревшие заявки.
Вот тут, да - все делаем в транзакции.
Соответственно, при расчете количества доступных билетов считаешь как КОЛ_БИЛЕТОВ - КОЛ_ЗАЯВОК.