Я прочитал, что транзакция обычно используется на веб-сайте бронирования билетов в кино, чтобы решить проблему одновременной покупки. Однако я не смог понять, почему это необходимо.
Если в то же время 2 пользователя бронируют один и тот же seat (ID = 1)
на одном и том же show (ID = 99)
, разве вы не можете просто выполнить следующую команду SQL?
UPDATE seat_db
SET takenByUserID=someUserId
WHERE showID=99 AND seatID=1 AND takenByUserID IS NOT NULL
Как я вижу, этот SQL уже был выполнен атомарно, проблем с параллелизмом нет. База данных установит для seat ID=1
1-го пользователя, от которого сервер получит запрос, а затем допустит сбой запроса 2-го пользователя. Итак, почему транзакция по-прежнему необходима для системы бронирования билетов?