powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корректный метод изолирования данных
2 сообщений из 2, страница 1 из 1
Корректный метод изолирования данных
    #39521274
K_West
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Ситуация:

Таблицы:

room

daily_room_status

room_category

room_status


HTML страница с формой бронирования комнаты юзером.

Процес бронирования - транзакция в 2 этапа:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT r.id 
FROM room AS r
INNER JOIN daily_room_status AS drs
ON r.id = drs.room_id
INNER JOIN room_category AS rc
ON r.category_id = rc.id
WHERE rc.category = ?
           AND r.size = ?
           AND drs.status_id IN (SELECT id FROM room_status WHERE STATUS IN ('CUSTOMER'))
           AND (drs.date BETWEEN ? AND ?) 
GROUP BY r.id
HAVING COUNT(r.id) = (TO_DAYS (?) - TO_DAYS(?))



2. Если ResultSet запроса из пунтка 1 непустой, то происходит бронировка комнаты (изменяется ее статус в таблице daily_room_status):

Код: sql
1.
2.
3.
UPDATE daily_room_status 
SET status_id = (SELECT id FROM room_status WHERE STATUS = ?)
WHERE room_id = ? AND (DATE BETWEEN ? AND ?)



Вопрос:
Как правильно изолировать транзакцию, чтобы никакой другой запрос не мог изменить данные между 1 и 2 этапами?

Спасибо!
...
Рейтинг: 0 / 0
Корректный метод изолирования данных
    #39521321
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT..FOR UPDATE
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Корректный метод изолирования данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]