Я искал в интернете и теперь требует некоторых разъяснений.
Я создаю сайт проката автомобилей, где клиенты могут забронировать роскошный автомобиль на выходные или на неделю.
У меня проблема в том, чтобы не допустить, чтобы 2 человека заказывали один и тот же автомобиль в одно и то же время. Я прочитал о сделке и хотел подтвердить, как она работает. Я прочитал много статей, но ничто не подтвердило, как я думаю, что это работает.
Когда операция TRANSACTION была запущена, она временно вставляет данные в базу данных, что затем запрещает кому-либо вставлять те же данные? Или он просто сохраняет вставку в браузере пользователя и вставляет только один раз?
СДЕЛКА звучит как то, что мне нужно, но мне просто нужно это подтверждение, прежде чем я продолжу. В противном случае мне нужно другое решение.
Спасибо заранее, и я надеюсь, что это имело смысл для тех, кто нашел время, чтобы прочитать его.
Есть два способа решить эту проблему:
UNIQUE
Индекс, который включает автомобиль и время бронирования, так что невозможно создать две записи с одинаковой комбинацией:
INSERT INTO bookings (car_id, date, customer_id) VALUES (1, '2014-09-29', 1903)
Где, если на эту дату есть уже существующее бронирование INSERT
потерпит неудачу с ошибкой. bookings
Таблица здесь представляет доступность конкретного автомобиля на определенную дату, и если он забронирован, то какой клиент его забронировал. Возможно, вы захотите добавить еще один слой для представления многодневных заказов.
Кроме того, флаг на столе бронирования, который обычно NULL
но может быть установлен при бронировании, хотя ваше обновление проверяет, что оно прошло успешно:
UPDATE bookings SET customer_id=1903 WHERE id=4535 AND customer_id IS NULL
Таким образом, вы не сможете повторно забронировать уже забронированный автомобиль.
Других решений пока нет …