Лабораторная работа №8 Транзакции
Изменения БД часто требуют выполнения нескольких запросов, например при покупке в электронном магазине требуется добавить запись в таблицу заказов и уменьшить число товарных позиций на складе. В промышленных БД одно событие может затрагивать большее число таблиц и требовать многочисленных запросов.
Если на этапе выполнения одного из запросов происходит сбой, это может нарушить целостность БД (товар может быть продан, а число товарных позиций на складе не обновлено). Чтобы сохранить целостность БД, все изменения должны выполняться как единое целое. Либо все изменения успешно выполняются, либо, в случае сбоя, БД принимает состояние, которое было до начала изменений. Это обеспечивается средствами обработки транзакций.
Транзакция– последовательность операторов SQL, выполняющихся как единая операция, которая не прерывается другими клиентами.
MS
Пример транзакции:
DECLARE @First int, @Second int
BEGIN TRANSACTION
UPDATE Skidka
SET [Razmer skidki]=500
WHERE [N skidki]=5
SET @First=@@ERROR
SAVE TRANSACTION SS
UPDATE Skidka
SET [Vid skidki]='Pensioneram'
WHERE [N skidki]=5
SET @Second=@@ERROR
IF @Second<>0
ROLLBACK TRANSACTION SS
IF @First=0 AND @Second=0
BEGIN
COMMIT TRANSACTION
PRINT 'Транзакция завершена'
END
ELSE
ROLLBACK TRANSACTION
ORACLE
Транзакция, которая обновляет стоимость услуги, или не обновляет её вообще:
BEGIN
savepoint sp;
UPDATE Usluga
SET stoimost_uslugi=stoimost_uslugi*1.3
WHERE n_uslugi=1;
UPDATE Usluga
SET stoimost_uslugi=stoimost_uslugi*1.2
WHERE n_uslugi=2;
exception
WHEN others
THEN
ROLLBACK TO SAVEPOINT sp;
COMMIT;
END;
Лабораторная работа №9
Работа с представлениями
Основная структурная единица реляционных БД – таблицы, но язык SQL предоставляет еще один способ организации данных. Представление – это запрос на выборку, которому присваивается уникальное имя и который можно сохранять или удалять из БД как хранимую процедуру. Представления позволяют увидеть результаты сохраненного запроса так, как будто это полноценная таблица.
MS,ORACLE
Создание представлений в этих базах данных выглядит одинаково:
Представление FIODATAвыводит ФИО из таблицы Клиент и Дату из таблицы Сделка, где № Сделки соответствует № Клиента:
CREATE VIEW FIODATA
AS
SELECT Klient.FIO, Sdelka.Data
FROM Klient JOIN Sdelka
ON [N sdelki]=Klient.[N klienta]
GO
Следующее представление SdView3 извлекает данные из 3х таблиц Клиент, Сделка и Услуга, ткие что Стоимость услугиБ меньше чем 10000 и № Сделки=№ Услуги и № Сделки=№ Клиента:
CREATE VIEW SdView3
AS
SELECT Klient.FIO, Klient.Telefon, Sdelka.Data, Usluga.Opisanie
FROM Klient, Sdelka, Usluga
WHERE Usluga.[Stoimost uslugi]<10000 AND Sdelka.[N sdelki]=Usluga.[N uslugi]
AND Sdelka.[N sdelki]=Klient.[N klienta]
GO
Заключение
Результатом выполнения лабораторных работ является ознакомление с языком SQLи его особенностями в разных базах данных.
В ходе выполнения были получены навыки составления запросов, создания триггеров, хранимых процедур и представлений.
Поставленные задачи выполнены полностью.