Учебно-практическое пособие москва 2017 ббк


 Пример использования транзакций



Pdf көрінісі
бет205/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   201   202   203   204   205   206   207   208   ...   243
Байланысты:
Язык SQL. Базовый курс

9.5 Пример использования транзакций
Продемонстрируем использование транзакций на примере базы данных «Авиапере-
возки». Для этого создадим новое бронирование и оформим два билета с двумя пе-
релетами в каждом. Выберем в качестве уровня изоляции READ COMMITTED.
BEGIN;
BEGIN;
Сначала добавим запись в таблицу «Бронирования», причем, значение поля
total_amount назначим равным 0. После завершения ввода строк в таблицу «Пере-
леты» мы обновим это значение: оно станет равным сумме стоимостей всех забро-
нированных перелетов. В качестве даты бронирования возьмем дату, которая была
принята в качестве текущей в базе данных. Эту дату выдает функция now(), созданная
в схеме bookings.
INSERT INTO bookings
( book_ref, book_date, total_amount )
VALUES ( 'ABC123', bookings.now(), 0 );
INSERT 0 1
Оформим два билета на двух разных пассажиров.
INSERT INTO tickets
( ticket_no, book_ref, passenger_id,
passenger_name)
VALUES ( '9991234567890', 'ABC123', '1234 123456',
'IVAN PETROV' );
INSERT 0 1
INSERT INTO tickets
( ticket_no, book_ref, passenger_id,
passenger_name)
VALUES ( '9991234567891', 'ABC123', '4321 654321',
'PETR IVANOV' );
INSERT 0 1
Отправим обоих пассажиров по маршруту Москва — Красноярск и обратно.
INSERT INTO ticket_flights
( ticket_no, flight_id,
fare_conditions, amount )
VALUES ( '9991234567890', 5572, 'Business', 12500 ),
( '9991234567890', 13881, 'Economy', 8500 );
INSERT 0 2
INSERT INTO ticket_flights
( ticket_no, flight_id,
fare_conditions, amount )
VALUES ( '9991234567891', 5572, 'Business', 12500 ),
( '9991234567891', 13881, 'Economy', 8500 );
215


INSERT 0 2
Подсчитаем общую стоимость забронированных билетов и запишем ее в строку таб-
лицы «Бронирования». Конечно, если такая транзакция выполняется в рамках при-
кладной программы, то возможно, что подсчет общей суммы будет выполняться в
этой программе. Тогда в команде UPDATE уже не потребуется выполнять подзапрос,
а будет использоваться заранее вычисленное значение. Но более надежным решени-
ем было бы использование триггера для увеличения значения поля total_amount при
каждом добавлении строки в таблицу ticket_flights. Триггеры будут рассмотрены во
второй части учебного пособия.


Достарыңызбен бөлісу:
1   ...   201   202   203   204   205   206   207   208   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет