ullman214 (2)

ullman214 (2)



7. SYSTEMOWh ASHI-.KTY JłjiYKA SQL

7.2. Transakcje w języku SQL

Opisane dotychczas działania na bazie danych polegały na tym, że użytkownik przeszukiwał dane w bazie lub modyfikował je. Tego typu działania były wykonywane sekwencyjnie, tzn. że stan bazy danych zmieniony w wyniku jednego działania stanowił stan wejściowy dla kolejnego działania. Ponadto zakładaliśmy, że działania są niepodzielne, tzn. że w trakcie wykonywania działania nie mogła się zdarzyć awaria, a więc baza uzyskałaby stan, którego nie dałoby się wyjaśnić jako wynik przetwarzanego działania.

Życie jest jednak nieco bardziej skomplikowane. Najpierw zastanowimy się, jakie mogą być przyczyny zmiany stanu bazy danych inne niż przetwarzanie formalnych działań na niej, a potem opiszemy narzędzia SQL, dzięki którym można unikać niekontrolowanych zmian danych w bazie.

7.2.1. Szeregowanie

W zastosowaniach baz danych w bankowości lub rezerwacji rejsów W'jednej sekundzie mogą być przetwarzane setki działań. Mogą być one inicjowane w dowolnym z setek lub tysięcy punktów, takich jak bankomaty lub komputery' w biurach podróży, lub też u pracowników- linii lotniczych, a nawet bezpośrednio u klientów. Jest bardzo prawdopodobne, że w'tej sytuacji może się zdarzyć zainicjowanie kilku działań dotyczących tego samego konta lub tego samego rejsu i nałożenia się tych działań w'czasie. Konsekwencje takiej sytuacji mogą okazać się niepożądane. Poniżej przedstawiamy przykład niekorzystnych zdarzeń, gdy w systemie zarządzania bazą danych nie działają żadne mechanizmy nadzorowania kolejności przetwarzania. Należy przy tym podkreślić, że takie sytuacje nie są typowe dla komercyjnych systemów' baz danych i trzeba się bardzo starać, żeby uzyskać w praktyce wystąpienie takich błędów'.

PRZYKŁAD 7. II

Załóżmy, że funkcja Rezerwacja {) przegląda krotki relacji dotyczących rejsów i dostępnych miejsc, znajduje wolne miejsce na dogodny rejs i zmienia jego stan na niedostępny. Relację nazwiemy Rejsy, a atrybuty r.umer-Rejsu, ćataRejsu, numerMiejsca oraz zajęte mają znaczenie zgodne z nazwą. Szkic programu rezerwującego miejsce został przedstawiony na rys. 7.8.

Fragment zapisany w wierszach od 9) do 11) na rys. 7.8 służy do wybrania jednego wiersza i określenia wartości zmiennej rez jako prawda lub fałsz (0 lub 1) w zależności od tego, czy miejsce jest zarezerwowane, czy też nie. W wierszu 12) sprawdza się, czy miejsce jest zarezerwowane i jeśli nie, to następuje modyfikacja wartości w krotce, powodująca zapis rezerwacji tego

1)    EXEC SQL BEGIN DECLARE SECTION;

T


I Ł.


2)    int rejs; /* numer rejsu */

3)    char data[10]; /* data rejsu w formacie SQL

4)    Char fotel[3]; /* miejsce jest oznaczone dw

ma cyframi oraz litera *

5)    ir.t rez; /* wartość logiczna, która sygnali

je, czy miejsce jest zarezerwowane

6)    EXEC SQL END DECLARE SECTION;

7)

3)


9)

10)

11)


void Rezerwuj() {

/* Kod w C, który zawiera interakcyjne pob nie wartości określających rejs, datę i tel oraz zapamiętuje je w trzech zmienny o takich nazwach */

EXEC SQL SELECT zajęte INTO :rez FROM Rejsy

WHERE numerRejsu “ :rejs

AND dataRejsu = :data AND miejsce = :fotel;

12)    if(i rez){

13)    EXEC SQL UPDATE Rejsy

14)    SET zajete » 'BI'

15)    WHERE numerRejsu = :rejs

AND dataRejsu = rdata;

AND miejsce = :fotel;

16)    /* kod w SQL i C, który służy do zapami€

nia przydziału miejsc w samolocie cr< informuje o tym użytkownika */

}

17)    else /* kod w C, który służy do poinformo*.

nia użytkownika o tym, że miejsc jest niedostępne oraz wprowadzeni; innego wyboru miejsca */

}

RYSUNEK 7.8 Wybór miejsca

miejsca. Modyfikacja następuje w wierszach od 13) do 15), a w wiersz przypisuje się to miejsce klientowi, który oczekuje na tę rezerwację. W tyce prawdopodobnie do zapisu rezerwacji służyłaby inna relacja. W ł w wierszu 17) zapisano instrukcję powiadomienia klienta o ty m, że nie n dokonać rezerwacji, jeśli właśnie tak się zdarzy'.

Zauważmy, że funkcja Rezerwacja () może być wywołana jedn śnie przez kilku użytkowników. Załóżmy, że przypadkiem dwóch agi


Wyszukiwarka

Podobne podstrony:
Zbiór cech transakcji Transakcja jest to zespół operacji na bazie danych (    )
Transakcje Transakcja to ciąg operacji (na bazie danych), które powinny być wykonane łącznie i
ullman218 (2) 7. SYSTEMOM ASPEKTY JĘZYKA SOL Można także poinformować system SQL o tym, żc transakcj
42485 ullman206 (2) 41$ 7. SYSTEMOWE ASPEKTY JĘZYKA SQI.7.1.2. Interfejs między językiem SQL i
43271 ullman221 (2) 7. SYSTEMOWE ASPEKTY Jl-ZYKA SQL RYSUNHK 7.11 Organizacja elementów bazy danych
Literatura: 1.    J. D. Ullman: Systemy baz danych, WNT, Warszawa 1998. 2.

więcej podobnych podstron