SlideShare a Scribd company logo
1 of 23
Download to read offline
Praktyczny kurs SQL
                           Autor: Danuta Mendrala, Marcin Szeliga
                           ISBN: 978-83-246-1604-6
                           Format: 158x235, stron: 304




                                                   Wykorzystaj pe³niê mo¿liwoœci baz danych
                                 • Na czym polega model relacyjny?
                                 • W jaki sposób pobieraæ dane z bazy?
                                 • Jak projektowaæ bazy danych i tabele?
                           Systemy zarz¹dzania bazami danych to aplikacje, które spotkaæ mo¿na praktycznie
                           w ka¿dej firmie.
                           Na rynku dostêpnych jest wiele takich narzêdzi, ró¿ni¹cych siê od siebie wydajnoœci¹,
                           wymaganiami sprzêtowymi, potencjalnymi zastosowaniami i – przede wszystkim
                           – cen¹. U¿ytkownicy mog¹ wybieraæ zarówno wœród rozwi¹zañ komercyjnych,
                           jak i nieustêpuj¹cych im rozwi¹zañ bezp³atnych. Cech¹ ³¹cz¹c¹ wszystkie systemy
                           zarz¹dzania bazami danych jest jêzyk, na którym opiera siê praca z nimi – SQL.
                           To ustandaryzowany zbiór poleceñ pozwalaj¹cych na niemal dowolne manipulacje
                           danymi zgromadzonymi w bazach, tworzenie nowych baz oraz administrowanie
                           serwerami baz danych. Bez jego znajomoœci wykorzystanie pe³ni mo¿liwoœci bazy
                           danych jest praktycznie niemo¿liwe.
                           „Praktyczny kurs SQL” to ksi¹¿ka, dziêki której poznasz ten jêzyk. Czytaj¹c j¹,
                           dowiesz siê, czym jest relacyjnoœæ w bazach danych, jak skonstruowane s¹ takie bazy
                           i czym s¹ postaci normalne. Nauczysz siê pobieraæ dane w oparciu o ró¿ne kryteria,
                           przetwarzaæ uzyskane wyniki i wyœwietlaæ je na ekranie w odpowiedni sposób. Poznasz
                           funkcje pozwalaj¹ce na modyfikacjê istniej¹cych i dodawanie nowych danych,
                           zastosujesz zapytania z³o¿one i podzapytania oraz wykorzystasz mechanizmy
                           transakcji. Przeczytasz tak¿e o projektowaniu baz danych oraz definiowaniu
                           i nadawaniu uprawnieñ do korzystania z nich.
                                 • Modele baz danych
                                 • Postaci normalne w modelu relacyjnym
                                 • Historia jêzyka SQL
                                 • Pobieranie danych za pomoc¹ instrukcji SELECT
Wydawnictwo Helion               • Dobór kryteriów wybierania
ul. Koœciuszki 1c                • Przetwarzanie wyników zapytañ
44-100 Gliwice                   • Zapytania z³o¿one i podzapytania
tel. 032 230 98 63               • Transakcje
e-mail: helion@helion.pl         • Modyfikowanie i dodawanie danych
                                 • Projektowanie baz danych
                                 • Uprawnienia
                                                    Poznaj w praktyce jêzyk bêd¹cy podstaw¹
                                         wszystkich nowoczesnych systemów zarz¹dzania bazami danych
Spis tre ci
               Wstöp .............................................................................................. 9

Czö è I        Trochö teorii, czyli modele i standardy .......................... 17
Rozdziaä 1. Relacyjny model baz danych ........................................................... 19
               Tabele jako zbiory danych .............................................................................................. 19
                  Kolumny maj niepowtarzalne nazwy i zawieraj okre lone typy danych ............... 20
                  Wiersze powinny byü unikalne ................................................................................ 21
                  Kolejno ü kolumn jest bez znaczenia ....................................................................... 21
                  Kolejno ü wierszy jest bez znaczenia ....................................................................... 22
               Bazy danych ................................................................................................................... 22
               Trzy modele baz danych: relacyjny, obiektowy i jednorodny ........................................ 23
                  Model jednorodny .................................................................................................... 23
                  Model relacyjny ....................................................................................................... 24
                  Model obiektowy ..................................................................................................... 25
               Zaáo enia relacyjnego modelu baz danych ..................................................................... 27
                  Postulaty Codda dotycz ce struktury danych ........................................................... 27
                  Postulaty Codda dotycz ce przetwarzania danych ................................................... 28
                  Postulaty Codda dotycz ce integralno ci danych ..................................................... 28
                  Normalizacja ............................................................................................................ 29
               Podsumowanie ................................................................................................................ 30
               Zadania ........................................................................................................................... 31
Rozdziaä 2. Standardy jözyka SQL ..................................................................... 33
               Strukturalny j zyk zapyta ............................................................................................. 33
                   Przetwarzanie zbiorów a przetwarzanie pojedynczych danych ................................ 34
                   J zyk deklaratywny a j zyk proceduralny ................................................................ 35
                   J zyk interpretowany a j zyk kompilowany ............................................................. 36
                   Skáadnia j zyka SQL ................................................................................................ 37
                   Dialekty j zyka SQL ................................................................................................ 39
               Standardy ANSI .............................................................................................................. 40
                   Historia ..................................................................................................................... 40
                   SQL3 ........................................................................................................................ 41
               Podsumowanie ................................................................................................................ 44
               Zadania ........................................................................................................................... 44
4                                                                                                                 Praktyczny kurs SQL


Czö è II       Pobieranie danych, czyli instrukcja SELECT ................... 47
Rozdziaä 3. Odczytywanie danych z wybranej tabeli ........................................... 49
               Klauzula FROM ............................................................................................................. 49
                   W peáni kwalifikowane nazwy obiektów ................................................................. 50
               Wybieranie kolumn ........................................................................................................ 51
               Eliminowanie duplikatów ............................................................................................... 52
               Wyra enia ....................................................................................................................... 53
                   Operatory arytmetyczne ........................................................................................... 54
                   à czenie danych tekstowych .................................................................................... 55
                   Funkcje systemowe .................................................................................................. 55
               Formatowanie wyników ................................................................................................. 58
                   Aliasy ....................................................................................................................... 59
                   Staáe (literaáy) ........................................................................................................... 60
               Sortowanie wyników ...................................................................................................... 60
                   Sortowanie danych tekstowych ................................................................................ 63
               Podsumowanie ................................................................................................................ 64
               Zadania ........................................................................................................................... 65
Rozdziaä 4. Wybieranie wierszy ......................................................................... 67
               Logika trójwarto ciowa .................................................................................................. 67
                  Warto ü NULL ......................................................................................................... 68
                  Operatory logiczne ................................................................................................... 68
               Klauzula WHERE .......................................................................................................... 70
                  Standardowe operatory porównania ......................................................................... 71
                  Operatory SQL ......................................................................................................... 72
                  Záo one warunki logiczne ........................................................................................ 75
               Klauzula TOP ................................................................................................................. 78
               Wydajne wyszukiwanie danych ...................................................................................... 80
                  W jaki sposób serwery bazodanowe odczytuj dane? .............................................. 80
                  W jakiej kolejno ci serwery bazodanowe wykonuj poszczególne
                    klauzule zapyta ? ................................................................................................... 83
                  Argumenty SARG .................................................................................................... 84
               Podsumowanie ................................................................................................................ 86
               Zadania ........................................................................................................................... 87
Rozdziaä 5. ãñczenie tabel i wyników zapytaþ ................................................... 89
               Zá czenia naturalne i nienaturalne .................................................................................. 89
                   Klucze obce .............................................................................................................. 90
                   Aliasy ....................................................................................................................... 93
               Zá czenia równo ciowe i nierówno ciowe ..................................................................... 94
               Zá czenia zewn trzne ..................................................................................................... 95
                   Zá czenie lewostronne .............................................................................................. 96
                   Zá czenie prawostronne ............................................................................................ 97
                   Zá czenie obustronne ................................................................................................ 97
               Zá czenie krzy owe (iloczyn kartezja ski) ..................................................................... 98
               Zá czenia wielokrotne ..................................................................................................... 99
                   Okre lanie kolejno ci zá cze ................................................................................ 102
               Zá czenie tabeli z ni sam ........................................................................................... 103
                   Eliminacja duplikatów ............................................................................................ 105
                   Klucze obce w obr bie jednej tabeli ....................................................................... 106
               à czenie wyników zapyta ........................................................................................... 107
                   Suma ....................................................................................................................... 107
                   Cz ü wspólna ........................................................................................................ 110
                   Ró nica ................................................................................................................... 110
Spis tre ci                                                                                                                                       5


                à czenie wierszy i wyników funkcji tabelarycznych ................................................... 111
                   Operator APPLY .................................................................................................... 112
                Podsumowanie .............................................................................................................. 114
                Zadania ......................................................................................................................... 114
Rozdziaä 6. Grupowanie wierszy ...................................................................... 117
                Funkcje grupuj ce ........................................................................................................ 117
                   Funkcja COUNT() .................................................................................................. 118
                   Funkcje SUM() i AVG() ........................................................................................ 119
                   Funkcje MIN() i MAX() ......................................................................................... 120
                   Inne funkcje grupuj ce ........................................................................................... 121
                   Wyra enia .............................................................................................................. 121
                Klauzula GROUP BY ................................................................................................... 122
                   Kolejno ü wykonywania klauzuli GROUP BY ...................................................... 125
                   Operatory CUBE i ROLLUP .................................................................................. 126
                   Operator GROUPING SETS .................................................................................. 129
                Wydajne grupowanie danych ....................................................................................... 131
                Niestandardowa klauzula OVER .................................................................................. 132
                   Partycje ................................................................................................................... 134
                   Funkcje rankingu .................................................................................................... 135
                Niestandardowe operatory PIVOT i UNPIVOT ........................................................... 137
                   PIVOT .................................................................................................................... 137
                   UNPIVOT .............................................................................................................. 139
                Klauzula HAVING ....................................................................................................... 140
                Podsumowanie .............................................................................................................. 142
                Zadania ......................................................................................................................... 143
Rozdziaä 7. Podzapytania ............................................................................... 145
                Czym s podzapytania? ................................................................................................ 145
                Podzapytania jako zmienne .......................................................................................... 146
                   Podzapytania niepowi zane .................................................................................... 146
                   Podzapytania powi zane ........................................................................................ 151
                Podzapytania jako ródáa danych ................................................................................. 157
                   Tabele pochodne .................................................................................................... 157
                   CTE ........................................................................................................................ 160
                   Wyznaczanie trendów ............................................................................................ 165
                Operatory ...................................................................................................................... 169
                   Operator EXISTS ................................................................................................... 170
                   Operator ANY lub SOME ...................................................................................... 173
                   Operator ALL ......................................................................................................... 176
                Podsumowanie .............................................................................................................. 178
                Zadania ......................................................................................................................... 179

Czö è III Modyfikowanie danych, czyli instrukcje INSERT,
          UPDATE, DELETE oraz MERGE .................................... 181
Rozdziaä 8. Modyfikowanie danych ................................................................. 183
                Wstawianie danych ....................................................................................................... 183
                   Klucze podstawowe ................................................................................................ 184
                   Warto ci domy lne ................................................................................................. 185
                   Warto ü NULL ....................................................................................................... 185
                   Konstruktor wierszy ............................................................................................... 186
                   Wstawianie wyników zapyta ................................................................................ 186
6                                                                                                                 Praktyczny kurs SQL


                Usuwanie danych .......................................................................................................... 188
                    Instrukcja DELETE ................................................................................................ 189
                    Instrukcja TRUNCATE TABLE ............................................................................ 191
                Aktualizowanie danych ................................................................................................ 191
                    Jednoczesne aktualizowanie wielu kolumn ............................................................ 192
                    Wyra enia .............................................................................................................. 192
                    Aktualizowanie danych wybranych na podstawie danych z innych tabel .............. 193
                    Aktualizowanie danych za pomoc wyra e odwoáuj cych si do innych tabel .... 193
                Instrukcja MERGE ....................................................................................................... 194
                Podsumowanie .............................................................................................................. 196
                Zadania ......................................................................................................................... 196
Rozdziaä 9. Transakcje i wspóäbie no è .......................................................... 197
                Wáa ciwo ci transakcji ................................................................................................. 197
                Transakcyjne przetwarzanie danych ............................................................................. 199
                   Tryb jawnego zatwierdzania transakcji .................................................................. 200
                   Rozpoczynanie transakcji ....................................................................................... 201
                   Wycofywanie transakcji ......................................................................................... 202
                   Zatwierdzanie transakcji ......................................................................................... 203
                   Zagnie d anie transakcji ........................................................................................ 203
                   Punkty przywracania .............................................................................................. 204
                Wspóábie no ü .............................................................................................................. 205
                   Blokady .................................................................................................................. 205
                   Zakleszczenia ......................................................................................................... 206
                   Poziomy izolowania transakcji ............................................................................... 207
                   Model optymistyczny ............................................................................................. 211
                   Model pesymistyczny ............................................................................................. 212
                Podsumowanie .............................................................................................................. 213
                Zadania ......................................................................................................................... 213

Czö è IV Tworzenie baz danych, czyli instrukcje CREATE,
         ALTER i DROP ............................................................ 215
Rozdziaä 10. Bazy danych i tabele .................................................................... 217
                Tworzenie i usuwanie baz danych ................................................................................ 217
                Tworzenie i usuwanie tabel .......................................................................................... 220
                   Schematy ................................................................................................................ 221
                Zmiana struktury tabeli ................................................................................................. 221
                Ograniczenia ................................................................................................................. 222
                   NOT NULL ............................................................................................................ 222
                   Klucz podstawowy ................................................................................................. 223
                   Niepowtarzalno ü ................................................................................................... 224
                   Warto ü domy lna .................................................................................................. 225
                   Warunek logiczny .................................................................................................. 225
                   Klucz obcy ............................................................................................................. 226
                   Ograniczenia a wydajno ü instrukcji modyfikuj cych i odczytuj cych dane ......... 229
                Podsumowanie .............................................................................................................. 231
                Zadania ......................................................................................................................... 231
Rozdziaä 11. Widoki i indeksy ........................................................................... 233
                Widoki .......................................................................................................................... 233
                   Tworzenie i usuwanie widoków ............................................................................. 234
                   Modyfikowanie widoków ....................................................................................... 236
                   Korzystanie z widoków .......................................................................................... 236
                   Zalety widoków ...................................................................................................... 241
Spis tre ci                                                                                                                                        7


               Indeksy ......................................................................................................................... 241
                   Tworzenie, modyfikowanie i usuwanie indeksów .................................................. 243
                   Porz dkowanie indeksów ....................................................................................... 245
               Podsumowanie .............................................................................................................. 246
               Zadania ......................................................................................................................... 247

Czö è V        Uprawnienia u ytkowników, czyli instrukcje
               GRANT i REVOKE ....................................................... 249
Rozdziaä 12. Nadawanie i odbieranie uprawnieþ ................................................ 251
               Konta u ytkowników .................................................................................................... 251
                  Zakáadanie i usuwanie kont u ytkowników ............................................................ 252
               Role .............................................................................................................................. 253
                  Tworzenie i usuwanie ról ....................................................................................... 253
                  Przypisywanie ról do u ytkowników ..................................................................... 254
                  Specjalna rola Public .............................................................................................. 254
               Uprawnienia ................................................................................................................. 254
                  Nadawanie i odbieranie uprawnie ........................................................................ 255
                  Dziedziczenie uprawnie ....................................................................................... 256
                  Przekazywanie uprawnie ...................................................................................... 258
                  Zasada minimalnych uprawnie ............................................................................. 259
               Podsumowanie .............................................................................................................. 259
               Zadania ......................................................................................................................... 260

Dodatki ..................................................................................... 261
Dodatek A Rozwiñzania zadaþ ....................................................................... 263
               Skorowidz .................................................................................... 295
Rozdziaä 9.
Transakcje
i wspóäbie no è
      Czym s transakcje?
      Co oznacza skrót ACID?
      Jakie s zalety transakcyjnego przetwarzania danych?
      Na czym polega ró nica pomi dzy transakcjami zagnie d onymi
       a zagnie d aniem transakcji?
      Co oznacza termin „wspóábie no ü”?
      Po co serwery bazodanowe zakáadaj blokady?
      Kiedy dochodzi do zakleszcze ?
      Czy warto zmieniaü domy lny poziom izolowania transakcji?
      W jakich sytuacjach optymistyczny model wspóábie no ci jest lepszy
       ni pesymistyczny?



Wäa ciwo ci transakcji
   Transakcje gwarantuj spójno ü modyfikowanych informacji. Typowym przykáa-
   dem transakcyjnego przetwarzania danych jest przeniesienie pieni dzy z jednego konta
   na drugie. Taka operacja przebiega w dwóch etapach:
     1. zmniejszenie o pewn sum stanu konta X,
     2. dodanie tej sumy do stanu konta Y.
198     Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


          Gdyby po wykonaniu pierwszej operacji wyst piá bá d uniemo liwiaj cy wykonanie
          drugiej, z systemu znikn áaby pewna suma pieni dzy. Równie nieprzyjemnym zasko-
          czeniem dla wáa ciciela byáoby sprawdzenie przez niego stanu obu jego kont ju po
          odj ciu danej sumy z pierwszego konta, ale przed jej dodaniem do drugiego konta.

            eby temu zapobiec, transakcje musz byü:
            1. Niepodzielne (ang. Atomicity). Niepodzielno ü oznacza, e zatwierdzane s
               wszystkie wchodz ce w skáad transakcji instrukcje albo nie jest zatwierdzana
                adna z nich. Innymi sáowy, wszystkie wchodz ce w skáad transakcji instrukcje
               musz byü wykonane poprawnie — je eli choü jedna z nich zgáosi bá d,
               wszystkie przeprowadzone w ramach transakcji zmiany zostan wycofane.
            2. Spójne (ang. Consistency). Ta cecha transakcji gwarantuje, e ich wykonanie
               nie doprowadzi, nawet w przypadku awarii serwera, do utraty spójno ci danych.
               Poniewa wszystkie zmiany danych wykonywane s w ramach transakcji,
               przechowywane w bazach informacje zawsze b d spójne1.
            3. Izolowane (ang. Isolation). Izolowanie transakcji wymaga albo zablokowania
               modyfikowanych w ramach jednej z nich danych, albo utworzenia ich dodatkowej
               wersji. W zale no ci od obowi zuj cego w ramach serwera lub sesji klienckiej
               poziomu izolowania transakcji, mo e doj ü do nast puj cych sytuacji:
               a) Utrata aktualizacji (ang. lost update) ma miejsce, gdy dwa procesy
                  modyfikuj jednocze nie te same dane. Przykáadowo jeden u ytkownik
                  zmienia cen towaru na 100 zá, a drugi — na 200. W takim przypadku
                  jedna ze zmian zostanie utracona (zast piona drug modyfikacj ).
                  Domy lnie skonfigurowane serwery bazodanowe nie dopuszczaj
                  do utraty aktualizacji.
               b) Brudne odczyty (ang. dirty read) — do takiej sytuacji dochodzi, gdy mo liwe
                  jest odczytanie zmian niezatwierdzonych jeszcze przez inny proces.
                  Je eli proces odczytuj cy nie za da zaáo enia blokady na odczytywanych
                  danych, uzyska do nich dost p nawet wtedy, kiedy wáa nie b d
                  modyfikowane. Gdyby proces modyfikuj cy wycofaá wprowadzone zmiany,
                  odczytane dane okazaáyby si niespójne. Domy lnie skonfigurowane
                  serwery bazodanowe nie dopuszczaj brudnych odczytów.
               c) Niepowtarzalne odczyty (ang. non-repeatable reads) maj miejsce, gdy
                  powtórzenie w ramach transakcji tego samego odczytu daje inny wynik.
                  Ró nice w wynikach s spowodowane tym, e natychmiast po zako czeniu
                  odczytu (a nie po zako czeniu caáej transakcji) proces odczytuj cy zdejmuje
                  blokady zaáo one na odczytywane dane. Niezablokowane dane mog byü
                  zmienione przez inny proces, a wi c ich powtórne odczytanie da inny
                  (niespójny) wynik. Domy lnie skonfigurowane serwery bazodanowe
                  dopuszczaj niepowtarzalne odczyty.



1
    Przynajmniej w teorii. W praktyce bazy danych ulegaj uszkodzeniu, choü bardzo rzadko z winy
    serwerów bazodanowych.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                   199


             d) Odczyty widma (ang. phantom reads) — sytuacja taka ma miejsce, je eli
               pomi dzy dwoma wykonanymi w ramach transakcji odczytami zmieni si
               liczba odczytywanych wierszy. Je eli np. podczas pierwszego odczytu
               w tabeli Produkty znajdowaáo si 100 produktów o cenach ni szych ni 10 zá,
               instrukcja SELECT * FROM Produkty WHERE Cena <10 zwróciáaby 100 wierszy.
               W trakcie trwania transakcji mo liwa jest jednak zmiana pozostaáych
               wierszy tabeli, w tym obni enie ceny jakiego produktu poni ej 10 zá.
               Mo liwe jest równie wstawienie do tej tabeli nowego produktu o cenie
               np. 7 zá. Z tego powodu drugie wykonanie tego samego zapytania zwróciáoby
               ju 102 wiersze. Domy lnie skonfigurowane serwery bazodanowe
               dopuszczaj odczyty widma.
          4. Trwaáe (ang. Durability). Trwaáo ü transakcji gwarantuje, e efekty
            zatwierdzonych transakcji b d zapisane w bazie, nawet w przypadku awarii
            serwera SQL 2005. Do przywrócenia spójno ci danych serwery bazodanowe
            z reguáy u ywaj jakiej formy dziennika transakcyjnego.

           Pierwsze litery cech transakcji (A — Atomicity, C — Consistency, I — Isolation,
           D — Durability) tworzñ skrót ACID, powszechnie u ywany do opisywania reguä
           przetwarzania danych, których muszñ przestrzegaè serwery bazodanowe, eby mogäy
           zostaè nazwane transakcyjnymi lub relacyjnymi.




Transakcyjne przetwarzanie danych
        Serwery bazodanowe mog dziaáaü w trybie niejawnego zatwierdzania transakcji (w ser-
        werze SQL 2008 taki tryb jest trybem domy lnym). Oznacza to, e u ytkownicy nie
        musz samodzielnie rozpoczynaü transakcji, bo serwer robi to za nich.

        W trybie niejawnego zatwierdzania transakcji wykonanie ka dej instrukcji j zyka SQL
        skáada si z trzech etapów:
          1. Serwer bazodanowy automatycznie rozpoczyna now transakcj .
          2. Wykonywana jest pojedyncza instrukcja SQL.
          3. Je eli instrukcja zostaáa wykonana z powodzeniem, transakcja jest zatwierdzana,
            w przeciwnym przypadku jest wycofywana.

           Taki sposób dziaäania oznacza, e u ytkownicy nie mogñ samodzielnie zatwierdzaè
           lub wycofywaè automatycznie rozpoczötych transakcji. Dlatego nazywa siö on trybem
           niejawnego zatwierdzania transakcji.


        Poni szy przykáad ilustruje dziaáanie trybu niejawnego zatwierdzania transakcji za po-
        moc funkcji systemowej @@TRANCOUNT zwracaj cej liczb otwartych, aktywnych w danym
        momencie transakcji:
200   Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


          SELECT @@TRANCOUNT;
          UPDATE Production.Product
          SET Color='Red'
          WHERE ProductID=1;
          SELECT @@TRANCOUNT;
          ------------------------------------------------------------
          0
          0

       Przed rozpocz ciem i po zako czeniu wykonywania instrukcji UPDATE nie byáo adnych
       otwartych transakcji.


Tryb jawnego zatwierdzania transakcji
       W niektórych serwerach bazodanowych (np. w serwerze Oracle) domy lnym trybem
       transakcyjnego przetwarzania danych jest tryb ich jawnego zatwierdzania. W tym trybie
       wykonanie ka dej instrukcji j zyka SQL przebiega nast puj co:
          1. Serwer bazodanowy automatycznie rozpoczyna now transakcj .
          2. Wykonywana jest pojedyncza instrukcja SQL.
          3. U ytkownik samodzielnie musi zatwierdziü lub wycofaü otwart przez serwer
            transakcj .

       Dziaáanie tego trybu mo na zasymulowaü w serwerze SQL 2008, ustawiaj c opcj sesji
       IMPLICIT_TRANSACTIONS:
          SET IMPLICIT_TRANSACTIONS ON;
          SELECT @@TRANCOUNT;
          UPDATE Production.Product
          SET Color='Red'
          WHERE ProductID=1;
          SELECT @@TRANCOUNT;
          ------------------------------------------------------------
          0
          1

       Tym razem przed rozpocz ciem instrukcji UPDATE równie nie byáo otwartych trans-
       akcji, ale niejawnie rozpocz ta transakcja nie zostaáa po jej wykonaniu automatycznie
       zamkni ta. Musi to zrobiü sam u ytkownik — albo zatwierdzaj c wprowadzone zmiany,
       albo je wycofuj c.

       Przed przej ciem do dalszych üwicze zako cz transakcj i wyá cz omawiany tryb:
          COMMIT TRAN;
          SET IMPLICIT_TRANSACTIONS OFF;


          Tryb jawnego zatwierdzania transakcji pozwala wycofywaè przypadkowe lub bäödne
          modyfikacje, ale zatwierdzanie transakcji, której samemu siö nie rozpoczöäo, jest
          maäo intuicyjne.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                     201


Rozpoczynanie transakcji
          Mechanizm transakcyjnego przetwarzania danych poka emy, jawnie rozpoczynaj c
          i ko cz c transakcje. Pozwoli nam to wykonaü w ramach poszczególnych transakcji
          dowoln liczb instrukcji oraz samodzielnie sterowaü czasem rozpocz cia i zako czenia
          poszczególnych transakcji.

            eby rozpocz ü transakcj , nale y wykonaü instrukcj BEGIN TRAN2:
             BEGIN TRAN;
             SELECT @@TRANCOUNT;
             ------------------------------------------------------------
             1

          Je eli teraz w ramach tej samej sesji (czyli w tym samym oknie edytora SQL) zaktu-
          alizujemy ceny wybranych towarów i sprawdzimy liczb aktywnych transakcji, dowie-
          my si , e rozpocz ta przez nas transakcja nadal jest otwarta:
             UPDATE Production.Product
             SET ListPrice=1
             WHERE ProductSubcategoryID=1;
             SELECT @@TRANCOUNT;
             ------------------------------------------------------------
             1

          Dopóki transakcja, w ramach której przeprowadzili my dowolne zmiany, jest otwarta,
          mo emy je albo wycofaü, albo zatwierdziü. Poniewa serwer bazodanowy nie jest w sta-
          nie przewidzieü naszej decyzji, a jedn z cech transakcji jest jej odizolowanie, próba
          odczytania danych z tabeli Production.Product w ramach tej samej sesji sko czy si
          zupeánie inaczej ni ta sama próba wykonana przez innego u ytkownika.

            eby si o tym przekonaü:
             1. W tym samym oknie kodu SQL wykonaj zapytanie:
                   SELECT Name,ListPrice,ProductSubcategoryID
                   FROM Production.Product
                   WHERE ProductSubcategoryID<3
                   ORDER BY ProductSubcategoryID;
                   ------------------------------------------------------------
                   Mountain-100 Silver, 38        1,0000         1
                   Mountain-100 Silver, 42        1,0000         1
                   Mountain-100 Silver, 44        1,0000         1
                   Mountain-100 Silver, 48        1,0000         1
                   …

             2. Zostaáo ono natychmiast wykonane, a cena ka dego produktu z podkategorii
                1 wynosi 1.
             3. eby wykonaü to samo zapytanie jako inny u ytkownik, otwórz nowe okno
               edytora SQL3 i skopiuj do niego powy sz instrukcj SELECT (rysunek 9.1).

2
    W niektórych serwerach bazodanowych transakcje rozpoczyna si instrukcjami BEGIN TRANSACTION
    lub BEGIN WORK.
3
    Mo na to zrobiü, naciskaj c kombinacj klawiszy Ctrl+N lub klikaj c przycisk New Query.
202     Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE




Rysunek 9.1. Zapytanie wykonuje si ju prawie dwie minuty, ale wci    nie zwróciáo adnych danych


             Transakcyjne przetwarzanie danych polega na takim realizowaniu ñdaþ klientów
             przez serwery bazodanowe, eby ka dy z nich miaä wra enie, e jest jedynym u yt-
             kownikiem serwera. Wymaga to opisanego w dalszej czö ci rozdziaäu blokowania
             obiektów, do których w danym momencie odwoäujñ siö inni u ytkownicy serwera.



Wycofywanie transakcji
          Wycofanie transakcji oznacza przywrócenie danych do stanu sprzed jej rozpo-
          cz cia i zdj cie wszystkich zaáo onych na potrzeby transakcji blokad. Je eli wrócimy
          do pierwszego okna edytora SQL (tego, w którym zapytanie zwróciáo wyniki) i wyko-
          namy w nim instrukcj ROLLBACK TRAN4, a nast pnie przeá czymy si do drugiego okna
          edytora SQL, przekonamy si , e zapytanie wreszcie zostaáo wykonane i w dodatku
          ceny produktów z pierwszej podkategorii wcale nie wynosz 1. Spowodowane jest to
          wycofaniem transakcji, w ramach której ceny byáy zmienione, i zdj ciem zaáo onych
          na jej potrzeby blokad:




4
    W niektórych serwerach bazodanowych transakcje wycofuje si instrukcjami ROLLBACK TRANSACTION
    lub ROLLBACK WORK.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                     203


             SELECT Name,ListPrice,ProductSubcategoryID
             FROM Production.Product
             WHERE ProductSubcategoryID<3
             ORDER BY ProductSubcategoryID;
             ------------------------------------------------------------
             Mountain-100 Silver, 38        3399,9900      1
             Mountain-100 Silver, 42        3399,9900      1
             Mountain-100 Silver, 44        3399,9900      1
             Mountain-100 Silver, 48        3399,9900      1
             Mountain-100 Black, 38         3374,9900      1



Zatwierdzanie transakcji
          Zatwierdzenie transakcji oznacza utrwalenie wprowadzonych w jej trakcie zmian
          i zdj cie wszystkich zaáo onych na potrzeby transakcji blokad. Wspomniany na
          pocz tku rozdziaáu przykáad przelania pieni dzy z jednego konta na drugie mógáby
          byü zaimplementowany w poni szy sposób:
             BEGIN TRAN;
             EXEC uspDodajDoKonta '123-456-78-90', 500;
             EXEC uspOdejmijOdKonta '231-645-87-09', 500;
             IF @@ERROR=0
               COMMIT TRAN;
             ELSE
               ROLLBACK TRAN;

          Po jawnym rozpocz ciu transakcji nast puje wywoáanie dwóch (nieistniej cych w bazie
          AdventureWorks) procedur. Je eli adna z nich nie zgáosi bá du, caáa transakcja b dzie
          zatwierdzona (zatwierdziü transakcj mo emy, wykonuj c instrukcj COMMIT TRAN5),
          w przeciwnym przypadku zostanie ona wycofana.


Zagnie d anie transakcji
          Wi kszo ü serwerów bazodanowych pozwala zagnie d aü transakcje, czyli wykonaü
          instrukcj BEGIN TRAN w ramach wcze niej rozpocz tej transakcji. Wynikiem takiej ope-
          racji jest zwi kszenie licznika otwartych transakcji, a nie rozpocz cie nowej (atomowej,
          niepodzielnej, trwaáej i spójnej) transakcji.

          Dziaáanie mechanizmu zagnie d ania transakcji ilustruje poni szy przykáad: wykona-
          nie instrukcji BEGIN TRAN powoduje zwi kszenie o jeden licznika otwartych transakcji,
          wykonie instrukcji COMMIT TRAN zmniejsza warto ü tego licznika o jeden, ale wykonanie
          instrukcji ROLLBACK zamyka transakcje i zeruje licznik otwartych transakcji:




5
    W niektórych serwerach bazodanowych transakcje zatwierdza si instrukcjami COMMIT TRANSACTION
    lub COMMIT WORK.
204     Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


             BEGIN TRAN;
             SELECT @@TRANCOUNT;
             BEGIN TRAN;
             SELECT @@TRANCOUNT;
             BEGIN TRAN;
             SELECT @@TRANCOUNT;
             COMMIT TRAN;
             SELECT @@TRANCOUNT;
             ROLLBACK TRAN;
             SELECT @@TRANCOUNT;
             ------------------------------------------------------------
             1
             2
             3
             2
             0



Punkty przywracania
          Wi kszo ü serwerów bazodanowych pozwala wycofaü nie tylko caá transakcj , ale
          te jej cz ü. W tym celu nale y w trakcie transakcji wykonaü instrukcj SAVE TRAN6,
          a nast pnie przywróciü j do danego punktu:
             BEGIN TRAN;
             INSERT INTO HumanResources.Department (Name, GroupName)
             VALUES ('TEST1', 'G1');
             SAVE TRAN PP1;
             INSERT INTO HumanResources.Department (Name, GroupName)
             VALUES ('TEST2', 'G1');
             SELECT @@TRANCOUNT;
             ROLLBACK TRAN PP1;
             SELECT @@TRANCOUNT;
             ------------------------------------------------------------
             1
             1

          Poniewa przywrócenie stanu transakcji do okre lonego punktu nie powoduje jej za-
          ko czenia (liczba otwartych transakcji nadal wynosi 1), musimy j zatwierdziü lub
          wycofaü:
             COMMIT TRAN;
             SELECT *
             FROM HumanResources.Department
             WHERE Name LIKE 'TEST_';
             ------------------------------------------------------------
             26         TEST1    G1      2008-01-27 10:02:34.690

          Poniewa druga instrukcja INSERT zostaáa wykonana po zdefiniowaniu punktu przy-
          wracania PP1, instrukcja ROLLBACK TRAN PP1 przywróciáa stan danych do momentu sprzed
          jej wykonania, i w rezultacie tyko pierwszy wiersz zostaá na trwaáe wstawiony do tabeli.


6
    W niektórych serwerach bazodanowych punkty przywracania tworzy si instrukcjami SAVE TRANSACTION
    lub SAVE WORK.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                   205



Wspóäbie no è
        Wspóábie no ü to zdolno ü systemu do jednoczesnego realizowania wielu operacji,
        z reguáy uzyskiwana poprzez uruchomienie osobnych procesów (robotników) na po-
        trzeby obsáugi poszczególnych da .

           Wspóäbie no è ma ogromny wpäyw na skalowalno è serwerów bazodanowych, czyli
           ich zdolno è do coraz szybszego wykonywania transakcji dziöki rozbudowywaniu
           komputerów, na przykäad zwiökszaniu ich mocy obliczeniowej czy przepustowo ci
           dysków twardych.


          eby ka dy z kilkuset czy nawet kilku tysi cy jednoczesnych u ytkowników serwera
        bazodanowego mógá pracowaü tak, jakby byá jego jedynym u ytkownikiem, konieczne
        jest odizolowanie od siebie poszczególnych transakcji. Umo liwiaj to automatycznie
        zakáadane blokady.


Blokady
        Pomijaj c analizy wewn trznych mechanizmów dziaáania ró nych serwerów bazoda-
        nowych, blokady mo na podzieliü ze wzgl du na ich tryb (sposób blokowania) i zakres
        (typ blokowanych zasobów).

Tryby blokad
        Tryb blokady decyduje o tym, czy mo liwe b dzie jej zaáo enie na zasobie wcze niej
        zablokowanym przez inny proces:
          1. Blokady wspóádzielone S (ang. Shared) s domy lnie zakáadane na odczytywanych
             obiektach, takich jak tabele czy wiersze. Na obiekt zablokowany w trybie S
             inne procesy te mog zaáo yü blokad S, czyli odczytuj cy nie blokuj
             innych odczytuj cych. Blokady S domy lnie zakáadane s tylko na czas
             wykonywania zapytania, a nie caáej transakcji.
          2. Blokady wyá czne X (ang. eXclusive) s zakáadane na modyfikowanych
             obiektach. Blokady X s niekompatybilne z innymi blokadami, czyli modyfikuj cy
             blokuj innych u ytkowników. W przeciwie stwie do blokad wspóádzielonych,
             blokady wyá czne domy lnie utrzymywane s do zako czenia caáej transakcji,
             a nie pojedynczej operacji.

Zakresy blokad
        Blokady mog byü zakáadane na poziomie poszczególnych wierszy, kluczy indeksów,
        stron, zakresów lub caáych tabel. Te obiekty tworz naturaln hierarchi : tabela skáada
        si z wielu stron, na ka dej stronie zapisanych jest wiele wierszy itd. Z tego powodu
        serwery bazodanowe musz analizowaü wszystkie istniej ce blokady, zanim zaáo now
        — je eli choü jeden wiersz tabeli jest zablokowany w trybie X, nie mo na na caáej tabeli
        zaáo yü innej blokady.
206     Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE



             Im wiöksze obiekty sñ blokowane, tym mniejsza wspóäbie no è (bo u ytkownicy
             muszñ däu ej czekaè na dostöp do zablokowanych zasobów), ale równie tym mniej-
             sza liczba blokad, którymi musi zarzñdzaè serwer bazodanowy (zaäo y jednñ blokadö
             na caäej tabeli zamiast miliona blokad na poszczególnych wierszach).



Zakleszczenia
          Zakleszczenie (ang. DeadLock) ma miejsce, gdy ró ne procesy blokuj si nawzajem
          w taki sposób, e aden z nich nie jest w stanie zaáo yü wymaganych do uko czenia
          ju rozpocz tych operacji blokad.

          Najcz ciej wyst puj dwa typy zakleszcze :
            1. Zakleszczenia cykliczne, wynikaj ce z tego, e dwa procesy w ró nych
               kolejno ciach próbuj uzyskaü dost p do tych samych zasobów.
            2. Zakleszczenia konwersji blokad, zwi zane ze zmian wcze niej zaáo onej
               blokady wspóádzielonej (wiele procesów mo e jednocze nie zablokowaü ten
               sam zasób w trybie S) na blokad wyá czn (tylko jeden proces mo e zaáo yü
               na tym samym obiekcie blokad X).

          Serwery bazodanowe automatycznie wykrywaj zakleszczenia i przerywaj dziaáanie
          jednego procesu. Na ofiar zakleszczenia wybierany jest proces o ni szym prioryte-
          cie, a je eli oba procesy maj ten sam priorytet, ofiar zakleszczenia zostaje ten, którego
          wycofanie jest mniej kosztowne.

          Mechanizm wykrywania i usuwania zakleszcze pokazuje poni szy przykáad:

          Pierwszy u ytkownik w ramach jawnie rozpocz tej transakcji modyfikuje kilka danych
          w tabeli HumanResources.Department:
            BEGIN TRAN;
            UPDATE HumanResources.Department
            SET Name = UPPER(Name)
            WHERE DepartmentID>5;
            ------------------------------------------------------------
             (18 row(s) affected)

          Nast pnie inny u ytkownik w ramach jawnie rozpocz tej przez siebie transakcji mo-
          dyfikuje znacznie wi cej danych w tabeli Production.Product7:
            BEGIN TRAN;
            UPDATE Production.Product
            SET Name = UPPER(Name)
            WHERE ProductID >300;
            ------------------------------------------------------------
             (500 row(s) affected)



7
    Zasymulowaü jednoczesn prac dwóch u ytkowników mo emy, otwieraj c nowe okno edytora SQL
    — ka de z okien nawi zuje wáasn sesj z baz danych.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                  207


        Nast pnie pierwszy u ytkownik próbuje odczytaü zawarto ü tabeli zablokowanej ju
        przez 2. sesj (okno wyników mo e pokazaü pierwszych kilkadziesi t wierszy, ale i tak
        u ytkownik b dzie musiaá czekaü na mo liwo ü zablokowania w trybie S pozostaáych
        wierszy tabeli Production.Product):
          SELECT *
          FROM Production.Product;

        W tym momencie nie wyst piáo jeszcze zakleszczenie — wystarczyáoby, eby drugi
        u ytkownik zako czyá swoj transakcj . Ale je eli w ramach 2. sesji u ytkownik spró-
        buje odczytaü zawarto ü tabeli zmodyfikowanej przez pierwszego u ytkownika, oba
        procesy si zakleszcz :
          SELECT *
          FROM HumanResources.Department;
          ------------------------------------------------------------
          1        Engineering    Research and Development      1998-06-01 00:00:00.000
          2        Tool Design    Research and Development      1998-06-01 00:00:00.000
          3        Sales          Sales and Marketing           1998-06-01 00:00:00.000
          …

        Po chwili drugie zapytanie zostaáo jednak wykonane, co wi cej, nazwy departamentów
        nie zostaáy przekonwertowane na du e litery. eby przekonaü si , dlaczego tak si
        staáo, wystarczy przeá czyü si do okienka 1. sesji. Znajdziemy w nim poni szy ko-
        munikat bá du:
          Msg 1205, Level 13, State 51, Line 2
          Transaction (Process ID 57) was deadlocked on lock resources with another process
          ´and has been chosen as the deadlock victim. Rerun the transaction.

        Je eli sprawdzimy liczb otwartych w ramach 1. sesji transakcji, oka e si , e jawnie
        rozpocz ta przez pierwszego u ytkownika transakcja zostaáa — zgodnie z komunikatem
        bá du — wycofana:
          SELECT @@TRANCOUNT;
          ------------------------------------------------------------
          0

        Poniewa wycofanie transakcji wi e si ze zdj ciem zaáo onych na jej potrzeby blokad,
        druga sesja mogáa z powodzeniem zako czyü operacje i odczytaü tabel HumanResources.
        ´Department. Liczba transakcji otwartych w ramach 2. sesji nadal wynosi 1 — eby
        zako czyü üwiczenie i wycofaü zmiany, nale y wykonaü w tym oknie edytora SQL
        instrukcj ROLLBACK TRAN.


Poziomy izolowania transakcji
        Mo emy wpáywaü na sposób zakáadania blokad przez serwery bazodanowe, zmieniaj c
        poziom izolowania transakcji. Wi kszo ü serwerów pozwala ustawiü (na poziomie
        serwera, bazy danych lub poszczególnych sesji) jeden z czterech poziomów izolo-
        wania transakcji, przedstawionych przez nas od najmniej restrykcyjnego, w którym
208   Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


       maksymalna wspóábie no ü okupiona jest wyst powaniem najwi kszej liczby typów nie-
       spójno ci danych, do najbardziej restrykcyjnego, który kosztem ograniczenia wspóábie -
       no ci gwarantuje najwy szy poziom spójno ci danych.

Read Uncommitted
       W trybie niezatwierdzonego odczytu (ang. Read Uncommitted) odczyt danych nie po-
       woduje zaáo enia blokady wspóádzielonej. Na tym poziomie wyst puj brudne od-
       czyty, niepowtarzalne odczyty i odczyty widma (jedynym niekorzystnym zjawi-
       skiem niewyst puj cym na tym poziomie jest utrata aktualizacji).

         eby si o tym przekonaü:
          1. W jednej sesji (oknie edytora SQL) rozpoczniemy transakcj i zaktualizujemy
            nazw dziaáu:
               BEGIN TRAN;
               UPDATE HumanResources.Department
               SET Name = 'ZmianaWToku'
               WHERE DepartmentID=5;
               ------------------------------------------------------------
                (1 row(s) affected)

          2. W drugiej sesji zmienimy poziom izolowania transakcji na Read Uncommitted
            i spróbujemy odczytaü modyfikowane przez innego u ytkownika dane:
               SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
               SELECT Name
               FROM HumanResources.Department
               WHERE DepartmentID = 5;
               ------------------------------------------------------------
               ZmianaWToku

       Udaáo nam si odczytaü dane, pomimo e osoba, która je zmieniaáa, nie zatwierdziáa
       jeszcze transakcji, a wi c w ka dej chwili mo e j wycofaü. W tym trybie (cz sto
       wymuszanym na poziomie poszczególnych instrukcji za pomoc specyficznych dla
       danego serwera bazodanowego dyrektyw optymalizatora) mo na odczytywaü dane,
       o których wiemy, e nie b d w tym samym czasie modyfikowane.

       Ko cz c üwiczenie, zamknij bez zatwierdzania otwartej transakcji i na nowo otwórz
       oba okna edytora SQL — w ten sposób kolejne üwiczenie rozpoczniemy, pracuj c
       w domy lnym trybie izolowania transakcji.

Read Committed
       Tryb odczytu zatwierdzonego (ang. Read Committed) jest domy lnym poziomem
       izolowania transakcji. Na tym poziomie odczyt danych wymaga zaáo enia na nich
       blokady wspóádzielonej. Poniewa zakáadana na czas zmiany blokada X jest niekom-
       patybilna z innymi blokadami, w tym z blokad S, eliminuje to brudne odczyty. Jednak
       na tym poziomie nadal wyst puj niepowtarzalne odczyty i odczyty widma.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                            209


          Zjawisko niepowtarzalnego odczytu pokazuje poni szy przykáad:
             1. W pierwszym oknie edytora SQL ustawiamy tryb odczytów zatwierdzonych8,
                jawnie rozpoczynamy transakcj i odczytujemy nazw wybranego departamentu:
                   SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
                   BEGIN TRAN;
                   SELECT Name
                   FROM HumanResources.Department
                   WHERE DepartmentID = 5;
                   ------------------------------------------------------------
                   Purchasing

             2. W tym momencie transakcja jest nadal otwarta, a my w drugim oknie
                edytora SQL zmienimy nazw tego departamentu:
                   UPDATE HumanResources.Department
                   SET Name = 'OdczytWToku'
                   WHERE DepartmentID=5;
                   ------------------------------------------------------------
                    (1 row(s) affected)

             3. Je eli pierwszy u ytkownik w ramach tej samej transakcji ponownie odczyta
                nazw departamentu, uzyska inny wynik:
                   SELECT Name
                   FROM HumanResources.Department
                   WHERE DepartmentID = 5;
                   COMMIT TRAN;
                   ------------------------------------------------------------
                   OdczytWToku


Repeatable Read
          W trybie powtarzalnego odczytu (ang. Repeatable Read) blokady wspóádzielone S
          utrzymywane s do czasu zako czenia caáej transakcji. Dzi ki temu inny proces nie
          mo e zmodyfikowaü odczytywanych w jej ramach danych, co eliminuje niepowtarzalne
          odczyty. Na tym poziomie wyst puj tylko odczyty widma.

          Zjawisko odczytu widma pokazuje poni szy przykáad:
             1. W ramach pierwszej sesji zmienimy poziom izolowania transakcji na Repeatable
                Read i w ramach jawnie rozpocz tej transakcji odczytamy nazwy towarów
                o cenach pomi dzy 10 a 15 dolarów:
                   SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
                   BEGIN TRAN;
                   SELECT Name
                   FROM Production.Product
                   WHERE ListPrice BETWEEN 10 AND 15;
                   ------------------------------------------------------------
                   Taillights - Battery-Powered



8
    Poniewa ten tryb jest trybem domy lnym, instrukcja SET dodana jest tylko w celach demonstracyjnych.
210   Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


          2. Podczas gdy pierwsza transakcja jest wci
                                                   otwarta, w drugim oknie
            edytora SQL zmienimy cen jednego towaru na 12 dolarów:
               UPDATE Production.Product
               SET ListPrice = 12
               WHERE ProductID =2;
               ------------------------------------------------------------
                (1 row(s) affected)

          3. Je eli pierwszy u ytkownik raz jeszcze wykona, w ramach tej samej transakcji,
            to samo zapytanie, tym razem jego wynik b dzie liczyá dwa wiersze
            — pojawi si w nim wiersz widmo:
               SELECT Name
               FROM Production.Product
               WHERE ListPrice BETWEEN 10 AND 15;
               ------------------------------------------------------------
               Bearing Ball
               Taillights - Battery-Powered

         4. Je eli jednak w ramach drugiej sesji spróbujemy zmieniü dane odczytywane
            w ramach nadal otwartej pierwszej transakcji (czyli doprowadziü
            do niepowtarzalnego odczytu), instrukcja b dzie oczekiwaü, a pierwsza
            transakcja zostanie zako czona, a zaáo one dla niej blokady zdj te:
               UPDATE Production.Product
               SET ListPrice = 8
               WHERE Name = 'Taillights - Battery-Powered';

          5. eby powy sza aktualizacja zostaáa wykonana, w pierwszym oknie edytora SQL
            wykonaj instrukcj COMMIT TRAN.

       W trybie Repeatable Read nale y odczytywaü te dane, które w ramach transakcji
       odczytywane s kilkukrotnie i mog byü zmieniane w tym samym czasie przez
       innych u ytkowników. Sytuacja taka ma miejsce np. w ró nego rodzaju zestawieniach
       i raportach zbiorczych, w których odczytuj c te same dane, za ka dym razem musimy
       otrzymaü te same wyniki, inaczej zestawienie lub raport b d niespójne.

Serializable
       W trybie szeregowania transakcje odwoáuj ce si do tych samych tabel wykonywane
       s jedna po drugiej. Blokowanie caáych obiektów, a nie tylko odczytywanych danych,
       na czas trwania transakcji pozwala wyeliminowaü odczyty widma, ale powoduje, e
       odczytuj c nawet jeden wiersz tabeli, mo emy uniemo liwiü pozostaáym u ytkownikom
       zmodyfikowanie przechowywanych w niej danych.

         eby si o tym przekonaü:
          1. W pierwszym oknie edytora SQL przeá czymy si do trybu szeregowania,
            jawnie rozpoczniemy transakcj i odczytamy informacje o wybranym towarze:
               SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
               BEGIN TRAN;
               SELECT ProductID, Name
               FROM Production.Product
Rozdziaä 9. i Transakcje i wspóäbie no è                                                         211


                   WHERE ListPrice BETWEEN 10 AND 15;
                   ------------------------------------------------------------
                   2          Bearing Ball

             2. Je eli teraz w drugim oknie edytora SQL spróbujemy zmieniü cen innego
                towaru, oka e si , e aktualizacja zostaáa zablokowana i b dzie wykonana
                dopiero po zako czeniu pierwszej transakcji:
                   UPDATE Production.Product
                   SET ListPrice = 120
                   WHERE ProductID =3;

             3. Ko cz c üwiczenie, zamknij oba okna edytora SQL bez zatwierdzania
                rozpocz tej w jednym z nich transakcji.

           W trybie Serializable mamy gwarancj , e odczytywane w ramach transakcji dane
           zawsze b d takie same — serwer bazodanowy nie dopu ci nie tylko do ich zmiany,
           ale równie do pojawienia si nowych danych. Jednak przez ten czas pozostali u yt-
           kownicy nie b d mogli modyfikowaü zablokowanych tabel. W wi kszo ci przypad-
           ków powoduje to tak znaczne wydáu enie czasu reakcji serwera, e lepiej jest skopio-
           waü odczytywane dane9, a je eli zmian nie jest zbyt du o, przeá czyü si do modelu
           optymistycznego.


Model optymistyczny
           W modelu optymistycznym tylko modyfikuj cy blokuj innych modyfikuj cych,
           czyli ró ni u ytkownicy mog jednocze nie modyfikowaü i odczytywaü te same dane.

           Serwery bazodanowe zapewniaj spójno ü modyfikowanych w tym modelu danych
           poprzez ich wersjonowanie. Zakáadaj c (optymistycznie), e w czasie gdy jeden u yt-
           kownik odczytuje dane, inni raczej nie b d ich modyfikowaü, s one w stanie na bie co
           zarz dzaü dodatkowymi wersjami danych.

           Je eli to zaáo enie jest prawdziwe, czyli je eli jednoczesne modyfikacje i odczyty
           tych samych danych nie zachodz zbyt cz sto, mo emy znacznie skróciü czas reak-
           cji serwera10, przeá czaj c baz do optymistycznego modelu wspóábie no ci. eby
           si o tym przekonaü:
             1. W pierwszym oknie edytora SQL wykonamy poni sze instrukcje, przeá czaj c
                baz AdventureWorks do modelu optymistycznego:
                   USE master;
                   ALTER DATABASE AdventureWorks
                   SET READ_COMMITTED_SNAPSHOT ON
                   WITH ROLLBACK IMMEDIATE;
                   ------------------------------------------------------------
                   Command(s) completed successfully.


9
     Niektóre serwery bazodanowe pozwalaj utworzyü migawk (ang. Snapshot) danych.
10
     Niektóre serwery bazodanowe, np. serwer Oracle, domy lnie dziaáaj w optymistycznym modelu
     wspóábie no ci.
212   Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE


          2. W tym samym oknie edytora SQL poá czymy si z baz AdventureWorks
            i w ramach jawnie rozpocz tej transakcji zmienimy dane dwóch pracowników:
               USE AdventureWorks;
               BEGIN TRAN;
               UPDATE HumanResources.Employee
               SET Title = 'X'
               WHERE EmployeeID <3;
               ------------------------------------------------------------
                (2 row(s) affected)

          3. W nowym oknie edytora SQL odczytamy dane o kilku pracownikach:
               SELECT EmployeeID, Title
               FROM HumanResources.Employee
               WHERE EmployeeID <5;
               ------------------------------------------------------------
               1        Production Technician - WC60
               2        Marketing Assistant
               3        Engineering Manager
               4        Senior Tool Designer

          4. Okazuje si , e tym razem zapytanie zostaáo wykonane natychmiast,
            ale z zachowaniem wymogów domy lnego trybu izolowania transakcji,
            czyli trybu Read Committed — pozostali u ytkownicy serwera odczytaj
            ostatni zatwierdzon wersj danych. Gdyby rozpocz ta w ramach pierwszej
            sesji transakcja zostaáa zatwierdzona, to ponowne wykonanie tego samego
            zapytania zwróciáoby najnowsz , zatwierdzon wersj , ze zmienionymi
            tytuáami dwóch pierwszych pracowników.


Model pesymistyczny
       W modelu pesymistycznym odczytuj cy s blokowani przez modyfikuj cych
       (serwer b dzie czekaá z zaáo eniem blokady S, a zdj ta zostanie blokada X), a mody-
       fikuj cy przez odczytuj cych (zaáo enie blokady X wymaga zdj cia blokady S).

       Poniewa koszt zarz dzania wieloma wersjami tych samych danych ro nie wraz ze wzro-
       stem wersjonowanych danych, w tym modelu zakáada si (pesymistycznie), e odczy-
       tywane dane b d w tym samym czasie regularnie modyfikowane.

        eby przywróciü pesymistyczny (domy lny) model wspóábie no ci bazy AdventureWorks,
       nale y wykonaü poni sze instrukcje:
          USE master;
          ALTER DATABASE AdventureWorks
          SET READ_COMMITTED_SNAPSHOT OFF
          WITH ROLLBACK IMMEDIATE;
          ------------------------------------------------------------
          Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Rozdziaä 9. i Transakcje i wspóäbie no è                                                213



Podsumowanie
           Serwery bazodanowe przeprowadzaj wszystkie zmiany danych w ramach
            jawnie lub niejawnie rozpocz tych transakcji.
           Transakcje powinny byü otwierane jak najpó niej i zamykane jak najwcze niej.
           Transakcje powinny zawieraü tylko powi zane ze sob instrukcje.
           Przerwane, czy to z powodu awarii klienta, czy te serwera, transakcje b d
            wycofane.
           Na czas trwania transakcji pewne obiekty bazy danych s automatycznie
            blokowane.
           Serwery bazodanowe automatycznie wykrywaj zakleszczenia i usuwaj je
            poprzez wycofanie jednej z zakleszczonych transakcji.
           Odizolowanie, jedn z czterech cech ACID transakcji, uzyskuje si za pomoc
            automatycznie zakáadanych i zwalnianych blokad.
           Mo na sterowaü sposobem zakáadania i czasem trwania blokad, zmieniaj c
            poziom izolowania transakcji.
           W modelu optymistycznym serwery bazodanowe wersjonuj dane, co poprawia
            wspóábie no ü kosztem wi kszego obci enia serwera.



Zadania
          1. Twoim zadaniem jest przygotowanie raportu podsumowuj cego roczn sprzeda .
            Wyliczaj c sumy i rednie warto ci sprzeda y produktów, kilkukrotnie musisz
            odczytaü tabel Production.Product. Jak zagwarantujesz poprawno ü
            wyników raportu?
          2. Po przerwie na lunch u ytkownicy zgáaszaj , e próby dalszej pracy z baz
            danych ko cz si chwilowym „zawieszeniem” programu i wreszcie
            komunikatem bá du mówi cym, e serwer bazodanowy jest niedost pny.
            Po sprawdzeniu okazuje si , e serwer i sieü dziaáaj normalnie, a baza nie
            zostaáa uszkodzona. Co jest najbardziej prawdopodobn przyczyn problemu?
          3. W ramach tworzonej procedury modyfikujesz du e ilo ci danych zapisanych
            w kilkunastu tabelach oraz wstawiasz jeden wiersz, informuj cy o wykonaniu
            wszystkich operacji, do tabeli znajduj cej si w bazie danych na zdalnym
            serwerze. Poá czenie pomi dzy serwerami jest mocno obci one i zdarza si ,
             e czas nawi zywania sesji i przesyáania danych mi dzy serwerami wielokrotnie
            si wydáu a. Co zrobiü, eby w przypadku zgáoszenia przez procedur bá du
            braku poá czenia ze zdalnym serwerem nie trzeba byáo ponownie wykonywaü
            kosztownych modyfikacji danych?

More Related Content

What's hot

Bazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaBazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaWydawnictwo Helion
 
Zaawansowane modele finansowe z wykorzystaniem Excela i VBA
Zaawansowane modele finansowe z wykorzystaniem Excela i VBAZaawansowane modele finansowe z wykorzystaniem Excela i VBA
Zaawansowane modele finansowe z wykorzystaniem Excela i VBAWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
Oracle Database 10g. Nowe możliwości
Oracle Database 10g. Nowe możliwościOracle Database 10g. Nowe możliwości
Oracle Database 10g. Nowe możliwościWydawnictwo Helion
 
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesie
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesieMicrosoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesie
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesieWydawnictwo Helion
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychWydawnictwo Helion
 
mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoraWydawnictwo Helion
 

What's hot (20)

SQL. Szybki start
SQL. Szybki startSQL. Szybki start
SQL. Szybki start
 
Bazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktykaBazy danych SQL. Teoria i praktyka
Bazy danych SQL. Teoria i praktyka
 
Access 2003 PL. Kurs
Access 2003 PL. KursAccess 2003 PL. Kurs
Access 2003 PL. Kurs
 
Oracle Discoverer
Oracle DiscovererOracle Discoverer
Oracle Discoverer
 
Wprowadzenie do baz danych
Wprowadzenie do baz danychWprowadzenie do baz danych
Wprowadzenie do baz danych
 
Po prostu Excel 2007 PL
Po prostu Excel 2007 PLPo prostu Excel 2007 PL
Po prostu Excel 2007 PL
 
Po prostu Access 2002/XP PL
Po prostu Access 2002/XP PLPo prostu Access 2002/XP PL
Po prostu Access 2002/XP PL
 
ACDSee. Ćwiczenia
ACDSee. ĆwiczeniaACDSee. Ćwiczenia
ACDSee. Ćwiczenia
 
MySQL. Opis języka
MySQL. Opis językaMySQL. Opis języka
MySQL. Opis języka
 
Zaawansowane modele finansowe z wykorzystaniem Excela i VBA
Zaawansowane modele finansowe z wykorzystaniem Excela i VBAZaawansowane modele finansowe z wykorzystaniem Excela i VBA
Zaawansowane modele finansowe z wykorzystaniem Excela i VBA
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
Oracle Database 10g. Nowe możliwości
Oracle Database 10g. Nowe możliwościOracle Database 10g. Nowe możliwości
Oracle Database 10g. Nowe możliwości
 
100 sposobów na Access
100 sposobów na Access100 sposobów na Access
100 sposobów na Access
 
ABC Access 2007 PL
ABC Access 2007 PLABC Access 2007 PL
ABC Access 2007 PL
 
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesie
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesieMicrosoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesie
Microsoft Office 2007 PL. Rady i wskazówki. Rozwiązania w biznesie
 
Access 2003 PL dla każdego
Access 2003 PL dla każdegoAccess 2003 PL dla każdego
Access 2003 PL dla każdego
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danych
 
ABC Excel 2007 PL
ABC Excel 2007 PLABC Excel 2007 PL
ABC Excel 2007 PL
 
Po prostu Excel 2003 PL
Po prostu Excel 2003 PLPo prostu Excel 2003 PL
Po prostu Excel 2003 PL
 
mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratora
 

Viewers also liked

Head First Software Development. Edycja polska
Head First Software Development. Edycja polskaHead First Software Development. Edycja polska
Head First Software Development. Edycja polskaWydawnictwo Helion
 
Photoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuPhotoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuWydawnictwo Helion
 
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneCorel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneWydawnictwo Helion
 
Programowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikProgramowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikWydawnictwo Helion
 
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyTworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyWydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyWydawnictwo Helion
 
Tworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikTworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikWydawnictwo Helion
 
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IITurbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IIWydawnictwo Helion
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikWydawnictwo Helion
 
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIMS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIWydawnictwo Helion
 

Viewers also liked (12)

Head First Software Development. Edycja polska
Head First Software Development. Edycja polskaHead First Software Development. Edycja polska
Head First Software Development. Edycja polska
 
Photoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazuPhotoshop. Księga kanałów obrazu
Photoshop. Księga kanałów obrazu
 
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczneCorel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
Corel Paint Shop Pro Photo X2. Obróbka zdjęć cyfrowych. Ćwiczenia praktyczne
 
Programowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznikProgramowanie w Excelu 2007 PL. Niebieski podręcznik
Programowanie w Excelu 2007 PL. Niebieski podręcznik
 
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. ProjektyTworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
Tworzenie stron WWW z wykorzystaniem Ajaksa. Projekty
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
C#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie IIC#. Ćwiczenia. Wydanie II
C#. Ćwiczenia. Wydanie II
 
SQL. Receptury
SQL. RecepturySQL. Receptury
SQL. Receptury
 
Tworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznikTworzenie stron WWW. Nieoficjalny podręcznik
Tworzenie stron WWW. Nieoficjalny podręcznik
 
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie IITurbo Pascal. Ćwiczenia praktyczne. Wydanie II
Turbo Pascal. Ćwiczenia praktyczne. Wydanie II
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
 
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i IIMS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
MS Office XP/2003 PL w biurze i sekretariacie. Tom I i II
 

Similar to Praktyczny kurs SQL

Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Wydawnictwo Helion
 
Excel. Praktyczne zastosowania w biznesie
Excel. Praktyczne zastosowania w biznesieExcel. Praktyczne zastosowania w biznesie
Excel. Praktyczne zastosowania w biznesieWydawnictwo Helion
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyWydawnictwo Helion
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQWydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówWydawnictwo Helion
 
C++. Algorytmy i struktury danych
C++. Algorytmy i struktury danychC++. Algorytmy i struktury danych
C++. Algorytmy i struktury danychWydawnictwo Helion
 
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie II
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie IIOkablowanie strukturalne sieci. Teoria i praktyka. Wydanie II
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie IIWydawnictwo Helion
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychWydawnictwo Helion
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawWydawnictwo Helion
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoWydawnictwo Helion
 

Similar to Praktyczny kurs SQL (18)

Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0Struktury danych i techniki obiektowe na przykładzie Javy 5.0
Struktury danych i techniki obiektowe na przykładzie Javy 5.0
 
Relacyjne bazy danych
Relacyjne bazy danychRelacyjne bazy danych
Relacyjne bazy danych
 
Excel. Praktyczne zastosowania w biznesie
Excel. Praktyczne zastosowania w biznesieExcel. Praktyczne zastosowania w biznesie
Excel. Praktyczne zastosowania w biznesie
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
Microsoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programistyMicrosoft SQL Server 2005. Podręcznik programisty
Microsoft SQL Server 2005. Podręcznik programisty
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
C++. Algorytmy i struktury danych
C++. Algorytmy i struktury danychC++. Algorytmy i struktury danych
C++. Algorytmy i struktury danych
 
SQL. Optymalizacja
SQL. OptymalizacjaSQL. Optymalizacja
SQL. Optymalizacja
 
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie II
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie IIOkablowanie strukturalne sieci. Teoria i praktyka. Wydanie II
Okablowanie strukturalne sieci. Teoria i praktyka. Wydanie II
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Oracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danychOracle9i. Podręcznik administratora baz danych
Oracle9i. Podręcznik administratora baz danych
 
Oracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstawOracle9i. Administrowanie bazami danych od podstaw
Oracle9i. Administrowanie bazami danych od podstaw
 
SQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystkoSQL Server 2005. Wyciśnij wszystko
SQL Server 2005. Wyciśnij wszystko
 
Excel. Funkcje w przykładach
Excel. Funkcje w przykładachExcel. Funkcje w przykładach
Excel. Funkcje w przykładach
 
MySQL. Szybki start
MySQL. Szybki startMySQL. Szybki start
MySQL. Szybki start
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 

Praktyczny kurs SQL

  • 1. Praktyczny kurs SQL Autor: Danuta Mendrala, Marcin Szeliga ISBN: 978-83-246-1604-6 Format: 158x235, stron: 304 Wykorzystaj pe³niê mo¿liwoœci baz danych • Na czym polega model relacyjny? • W jaki sposób pobieraæ dane z bazy? • Jak projektowaæ bazy danych i tabele? Systemy zarz¹dzania bazami danych to aplikacje, które spotkaæ mo¿na praktycznie w ka¿dej firmie. Na rynku dostêpnych jest wiele takich narzêdzi, ró¿ni¹cych siê od siebie wydajnoœci¹, wymaganiami sprzêtowymi, potencjalnymi zastosowaniami i – przede wszystkim – cen¹. U¿ytkownicy mog¹ wybieraæ zarówno wœród rozwi¹zañ komercyjnych, jak i nieustêpuj¹cych im rozwi¹zañ bezp³atnych. Cech¹ ³¹cz¹c¹ wszystkie systemy zarz¹dzania bazami danych jest jêzyk, na którym opiera siê praca z nimi – SQL. To ustandaryzowany zbiór poleceñ pozwalaj¹cych na niemal dowolne manipulacje danymi zgromadzonymi w bazach, tworzenie nowych baz oraz administrowanie serwerami baz danych. Bez jego znajomoœci wykorzystanie pe³ni mo¿liwoœci bazy danych jest praktycznie niemo¿liwe. „Praktyczny kurs SQL” to ksi¹¿ka, dziêki której poznasz ten jêzyk. Czytaj¹c j¹, dowiesz siê, czym jest relacyjnoœæ w bazach danych, jak skonstruowane s¹ takie bazy i czym s¹ postaci normalne. Nauczysz siê pobieraæ dane w oparciu o ró¿ne kryteria, przetwarzaæ uzyskane wyniki i wyœwietlaæ je na ekranie w odpowiedni sposób. Poznasz funkcje pozwalaj¹ce na modyfikacjê istniej¹cych i dodawanie nowych danych, zastosujesz zapytania z³o¿one i podzapytania oraz wykorzystasz mechanizmy transakcji. Przeczytasz tak¿e o projektowaniu baz danych oraz definiowaniu i nadawaniu uprawnieñ do korzystania z nich. • Modele baz danych • Postaci normalne w modelu relacyjnym • Historia jêzyka SQL • Pobieranie danych za pomoc¹ instrukcji SELECT Wydawnictwo Helion • Dobór kryteriów wybierania ul. Koœciuszki 1c • Przetwarzanie wyników zapytañ 44-100 Gliwice • Zapytania z³o¿one i podzapytania tel. 032 230 98 63 • Transakcje e-mail: helion@helion.pl • Modyfikowanie i dodawanie danych • Projektowanie baz danych • Uprawnienia Poznaj w praktyce jêzyk bêd¹cy podstaw¹ wszystkich nowoczesnych systemów zarz¹dzania bazami danych
  • 2. Spis tre ci Wstöp .............................................................................................. 9 Czö è I Trochö teorii, czyli modele i standardy .......................... 17 Rozdziaä 1. Relacyjny model baz danych ........................................................... 19 Tabele jako zbiory danych .............................................................................................. 19 Kolumny maj niepowtarzalne nazwy i zawieraj okre lone typy danych ............... 20 Wiersze powinny byü unikalne ................................................................................ 21 Kolejno ü kolumn jest bez znaczenia ....................................................................... 21 Kolejno ü wierszy jest bez znaczenia ....................................................................... 22 Bazy danych ................................................................................................................... 22 Trzy modele baz danych: relacyjny, obiektowy i jednorodny ........................................ 23 Model jednorodny .................................................................................................... 23 Model relacyjny ....................................................................................................... 24 Model obiektowy ..................................................................................................... 25 Zaáo enia relacyjnego modelu baz danych ..................................................................... 27 Postulaty Codda dotycz ce struktury danych ........................................................... 27 Postulaty Codda dotycz ce przetwarzania danych ................................................... 28 Postulaty Codda dotycz ce integralno ci danych ..................................................... 28 Normalizacja ............................................................................................................ 29 Podsumowanie ................................................................................................................ 30 Zadania ........................................................................................................................... 31 Rozdziaä 2. Standardy jözyka SQL ..................................................................... 33 Strukturalny j zyk zapyta ............................................................................................. 33 Przetwarzanie zbiorów a przetwarzanie pojedynczych danych ................................ 34 J zyk deklaratywny a j zyk proceduralny ................................................................ 35 J zyk interpretowany a j zyk kompilowany ............................................................. 36 Skáadnia j zyka SQL ................................................................................................ 37 Dialekty j zyka SQL ................................................................................................ 39 Standardy ANSI .............................................................................................................. 40 Historia ..................................................................................................................... 40 SQL3 ........................................................................................................................ 41 Podsumowanie ................................................................................................................ 44 Zadania ........................................................................................................................... 44
  • 3. 4 Praktyczny kurs SQL Czö è II Pobieranie danych, czyli instrukcja SELECT ................... 47 Rozdziaä 3. Odczytywanie danych z wybranej tabeli ........................................... 49 Klauzula FROM ............................................................................................................. 49 W peáni kwalifikowane nazwy obiektów ................................................................. 50 Wybieranie kolumn ........................................................................................................ 51 Eliminowanie duplikatów ............................................................................................... 52 Wyra enia ....................................................................................................................... 53 Operatory arytmetyczne ........................................................................................... 54 à czenie danych tekstowych .................................................................................... 55 Funkcje systemowe .................................................................................................. 55 Formatowanie wyników ................................................................................................. 58 Aliasy ....................................................................................................................... 59 Staáe (literaáy) ........................................................................................................... 60 Sortowanie wyników ...................................................................................................... 60 Sortowanie danych tekstowych ................................................................................ 63 Podsumowanie ................................................................................................................ 64 Zadania ........................................................................................................................... 65 Rozdziaä 4. Wybieranie wierszy ......................................................................... 67 Logika trójwarto ciowa .................................................................................................. 67 Warto ü NULL ......................................................................................................... 68 Operatory logiczne ................................................................................................... 68 Klauzula WHERE .......................................................................................................... 70 Standardowe operatory porównania ......................................................................... 71 Operatory SQL ......................................................................................................... 72 Záo one warunki logiczne ........................................................................................ 75 Klauzula TOP ................................................................................................................. 78 Wydajne wyszukiwanie danych ...................................................................................... 80 W jaki sposób serwery bazodanowe odczytuj dane? .............................................. 80 W jakiej kolejno ci serwery bazodanowe wykonuj poszczególne klauzule zapyta ? ................................................................................................... 83 Argumenty SARG .................................................................................................... 84 Podsumowanie ................................................................................................................ 86 Zadania ........................................................................................................................... 87 Rozdziaä 5. ãñczenie tabel i wyników zapytaþ ................................................... 89 Zá czenia naturalne i nienaturalne .................................................................................. 89 Klucze obce .............................................................................................................. 90 Aliasy ....................................................................................................................... 93 Zá czenia równo ciowe i nierówno ciowe ..................................................................... 94 Zá czenia zewn trzne ..................................................................................................... 95 Zá czenie lewostronne .............................................................................................. 96 Zá czenie prawostronne ............................................................................................ 97 Zá czenie obustronne ................................................................................................ 97 Zá czenie krzy owe (iloczyn kartezja ski) ..................................................................... 98 Zá czenia wielokrotne ..................................................................................................... 99 Okre lanie kolejno ci zá cze ................................................................................ 102 Zá czenie tabeli z ni sam ........................................................................................... 103 Eliminacja duplikatów ............................................................................................ 105 Klucze obce w obr bie jednej tabeli ....................................................................... 106 à czenie wyników zapyta ........................................................................................... 107 Suma ....................................................................................................................... 107 Cz ü wspólna ........................................................................................................ 110 Ró nica ................................................................................................................... 110
  • 4. Spis tre ci 5 à czenie wierszy i wyników funkcji tabelarycznych ................................................... 111 Operator APPLY .................................................................................................... 112 Podsumowanie .............................................................................................................. 114 Zadania ......................................................................................................................... 114 Rozdziaä 6. Grupowanie wierszy ...................................................................... 117 Funkcje grupuj ce ........................................................................................................ 117 Funkcja COUNT() .................................................................................................. 118 Funkcje SUM() i AVG() ........................................................................................ 119 Funkcje MIN() i MAX() ......................................................................................... 120 Inne funkcje grupuj ce ........................................................................................... 121 Wyra enia .............................................................................................................. 121 Klauzula GROUP BY ................................................................................................... 122 Kolejno ü wykonywania klauzuli GROUP BY ...................................................... 125 Operatory CUBE i ROLLUP .................................................................................. 126 Operator GROUPING SETS .................................................................................. 129 Wydajne grupowanie danych ....................................................................................... 131 Niestandardowa klauzula OVER .................................................................................. 132 Partycje ................................................................................................................... 134 Funkcje rankingu .................................................................................................... 135 Niestandardowe operatory PIVOT i UNPIVOT ........................................................... 137 PIVOT .................................................................................................................... 137 UNPIVOT .............................................................................................................. 139 Klauzula HAVING ....................................................................................................... 140 Podsumowanie .............................................................................................................. 142 Zadania ......................................................................................................................... 143 Rozdziaä 7. Podzapytania ............................................................................... 145 Czym s podzapytania? ................................................................................................ 145 Podzapytania jako zmienne .......................................................................................... 146 Podzapytania niepowi zane .................................................................................... 146 Podzapytania powi zane ........................................................................................ 151 Podzapytania jako ródáa danych ................................................................................. 157 Tabele pochodne .................................................................................................... 157 CTE ........................................................................................................................ 160 Wyznaczanie trendów ............................................................................................ 165 Operatory ...................................................................................................................... 169 Operator EXISTS ................................................................................................... 170 Operator ANY lub SOME ...................................................................................... 173 Operator ALL ......................................................................................................... 176 Podsumowanie .............................................................................................................. 178 Zadania ......................................................................................................................... 179 Czö è III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE .................................... 181 Rozdziaä 8. Modyfikowanie danych ................................................................. 183 Wstawianie danych ....................................................................................................... 183 Klucze podstawowe ................................................................................................ 184 Warto ci domy lne ................................................................................................. 185 Warto ü NULL ....................................................................................................... 185 Konstruktor wierszy ............................................................................................... 186 Wstawianie wyników zapyta ................................................................................ 186
  • 5. 6 Praktyczny kurs SQL Usuwanie danych .......................................................................................................... 188 Instrukcja DELETE ................................................................................................ 189 Instrukcja TRUNCATE TABLE ............................................................................ 191 Aktualizowanie danych ................................................................................................ 191 Jednoczesne aktualizowanie wielu kolumn ............................................................ 192 Wyra enia .............................................................................................................. 192 Aktualizowanie danych wybranych na podstawie danych z innych tabel .............. 193 Aktualizowanie danych za pomoc wyra e odwoáuj cych si do innych tabel .... 193 Instrukcja MERGE ....................................................................................................... 194 Podsumowanie .............................................................................................................. 196 Zadania ......................................................................................................................... 196 Rozdziaä 9. Transakcje i wspóäbie no è .......................................................... 197 Wáa ciwo ci transakcji ................................................................................................. 197 Transakcyjne przetwarzanie danych ............................................................................. 199 Tryb jawnego zatwierdzania transakcji .................................................................. 200 Rozpoczynanie transakcji ....................................................................................... 201 Wycofywanie transakcji ......................................................................................... 202 Zatwierdzanie transakcji ......................................................................................... 203 Zagnie d anie transakcji ........................................................................................ 203 Punkty przywracania .............................................................................................. 204 Wspóábie no ü .............................................................................................................. 205 Blokady .................................................................................................................. 205 Zakleszczenia ......................................................................................................... 206 Poziomy izolowania transakcji ............................................................................... 207 Model optymistyczny ............................................................................................. 211 Model pesymistyczny ............................................................................................. 212 Podsumowanie .............................................................................................................. 213 Zadania ......................................................................................................................... 213 Czö è IV Tworzenie baz danych, czyli instrukcje CREATE, ALTER i DROP ............................................................ 215 Rozdziaä 10. Bazy danych i tabele .................................................................... 217 Tworzenie i usuwanie baz danych ................................................................................ 217 Tworzenie i usuwanie tabel .......................................................................................... 220 Schematy ................................................................................................................ 221 Zmiana struktury tabeli ................................................................................................. 221 Ograniczenia ................................................................................................................. 222 NOT NULL ............................................................................................................ 222 Klucz podstawowy ................................................................................................. 223 Niepowtarzalno ü ................................................................................................... 224 Warto ü domy lna .................................................................................................. 225 Warunek logiczny .................................................................................................. 225 Klucz obcy ............................................................................................................. 226 Ograniczenia a wydajno ü instrukcji modyfikuj cych i odczytuj cych dane ......... 229 Podsumowanie .............................................................................................................. 231 Zadania ......................................................................................................................... 231 Rozdziaä 11. Widoki i indeksy ........................................................................... 233 Widoki .......................................................................................................................... 233 Tworzenie i usuwanie widoków ............................................................................. 234 Modyfikowanie widoków ....................................................................................... 236 Korzystanie z widoków .......................................................................................... 236 Zalety widoków ...................................................................................................... 241
  • 6. Spis tre ci 7 Indeksy ......................................................................................................................... 241 Tworzenie, modyfikowanie i usuwanie indeksów .................................................. 243 Porz dkowanie indeksów ....................................................................................... 245 Podsumowanie .............................................................................................................. 246 Zadania ......................................................................................................................... 247 Czö è V Uprawnienia u ytkowników, czyli instrukcje GRANT i REVOKE ....................................................... 249 Rozdziaä 12. Nadawanie i odbieranie uprawnieþ ................................................ 251 Konta u ytkowników .................................................................................................... 251 Zakáadanie i usuwanie kont u ytkowników ............................................................ 252 Role .............................................................................................................................. 253 Tworzenie i usuwanie ról ....................................................................................... 253 Przypisywanie ról do u ytkowników ..................................................................... 254 Specjalna rola Public .............................................................................................. 254 Uprawnienia ................................................................................................................. 254 Nadawanie i odbieranie uprawnie ........................................................................ 255 Dziedziczenie uprawnie ....................................................................................... 256 Przekazywanie uprawnie ...................................................................................... 258 Zasada minimalnych uprawnie ............................................................................. 259 Podsumowanie .............................................................................................................. 259 Zadania ......................................................................................................................... 260 Dodatki ..................................................................................... 261 Dodatek A Rozwiñzania zadaþ ....................................................................... 263 Skorowidz .................................................................................... 295
  • 7. Rozdziaä 9. Transakcje i wspóäbie no è  Czym s transakcje?  Co oznacza skrót ACID?  Jakie s zalety transakcyjnego przetwarzania danych?  Na czym polega ró nica pomi dzy transakcjami zagnie d onymi a zagnie d aniem transakcji?  Co oznacza termin „wspóábie no ü”?  Po co serwery bazodanowe zakáadaj blokady?  Kiedy dochodzi do zakleszcze ?  Czy warto zmieniaü domy lny poziom izolowania transakcji?  W jakich sytuacjach optymistyczny model wspóábie no ci jest lepszy ni pesymistyczny? Wäa ciwo ci transakcji Transakcje gwarantuj spójno ü modyfikowanych informacji. Typowym przykáa- dem transakcyjnego przetwarzania danych jest przeniesienie pieni dzy z jednego konta na drugie. Taka operacja przebiega w dwóch etapach: 1. zmniejszenie o pewn sum stanu konta X, 2. dodanie tej sumy do stanu konta Y.
  • 8. 198 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE Gdyby po wykonaniu pierwszej operacji wyst piá bá d uniemo liwiaj cy wykonanie drugiej, z systemu znikn áaby pewna suma pieni dzy. Równie nieprzyjemnym zasko- czeniem dla wáa ciciela byáoby sprawdzenie przez niego stanu obu jego kont ju po odj ciu danej sumy z pierwszego konta, ale przed jej dodaniem do drugiego konta. eby temu zapobiec, transakcje musz byü: 1. Niepodzielne (ang. Atomicity). Niepodzielno ü oznacza, e zatwierdzane s wszystkie wchodz ce w skáad transakcji instrukcje albo nie jest zatwierdzana adna z nich. Innymi sáowy, wszystkie wchodz ce w skáad transakcji instrukcje musz byü wykonane poprawnie — je eli choü jedna z nich zgáosi bá d, wszystkie przeprowadzone w ramach transakcji zmiany zostan wycofane. 2. Spójne (ang. Consistency). Ta cecha transakcji gwarantuje, e ich wykonanie nie doprowadzi, nawet w przypadku awarii serwera, do utraty spójno ci danych. Poniewa wszystkie zmiany danych wykonywane s w ramach transakcji, przechowywane w bazach informacje zawsze b d spójne1. 3. Izolowane (ang. Isolation). Izolowanie transakcji wymaga albo zablokowania modyfikowanych w ramach jednej z nich danych, albo utworzenia ich dodatkowej wersji. W zale no ci od obowi zuj cego w ramach serwera lub sesji klienckiej poziomu izolowania transakcji, mo e doj ü do nast puj cych sytuacji: a) Utrata aktualizacji (ang. lost update) ma miejsce, gdy dwa procesy modyfikuj jednocze nie te same dane. Przykáadowo jeden u ytkownik zmienia cen towaru na 100 zá, a drugi — na 200. W takim przypadku jedna ze zmian zostanie utracona (zast piona drug modyfikacj ). Domy lnie skonfigurowane serwery bazodanowe nie dopuszczaj do utraty aktualizacji. b) Brudne odczyty (ang. dirty read) — do takiej sytuacji dochodzi, gdy mo liwe jest odczytanie zmian niezatwierdzonych jeszcze przez inny proces. Je eli proces odczytuj cy nie za da zaáo enia blokady na odczytywanych danych, uzyska do nich dost p nawet wtedy, kiedy wáa nie b d modyfikowane. Gdyby proces modyfikuj cy wycofaá wprowadzone zmiany, odczytane dane okazaáyby si niespójne. Domy lnie skonfigurowane serwery bazodanowe nie dopuszczaj brudnych odczytów. c) Niepowtarzalne odczyty (ang. non-repeatable reads) maj miejsce, gdy powtórzenie w ramach transakcji tego samego odczytu daje inny wynik. Ró nice w wynikach s spowodowane tym, e natychmiast po zako czeniu odczytu (a nie po zako czeniu caáej transakcji) proces odczytuj cy zdejmuje blokady zaáo one na odczytywane dane. Niezablokowane dane mog byü zmienione przez inny proces, a wi c ich powtórne odczytanie da inny (niespójny) wynik. Domy lnie skonfigurowane serwery bazodanowe dopuszczaj niepowtarzalne odczyty. 1 Przynajmniej w teorii. W praktyce bazy danych ulegaj uszkodzeniu, choü bardzo rzadko z winy serwerów bazodanowych.
  • 9. Rozdziaä 9. i Transakcje i wspóäbie no è 199 d) Odczyty widma (ang. phantom reads) — sytuacja taka ma miejsce, je eli pomi dzy dwoma wykonanymi w ramach transakcji odczytami zmieni si liczba odczytywanych wierszy. Je eli np. podczas pierwszego odczytu w tabeli Produkty znajdowaáo si 100 produktów o cenach ni szych ni 10 zá, instrukcja SELECT * FROM Produkty WHERE Cena <10 zwróciáaby 100 wierszy. W trakcie trwania transakcji mo liwa jest jednak zmiana pozostaáych wierszy tabeli, w tym obni enie ceny jakiego produktu poni ej 10 zá. Mo liwe jest równie wstawienie do tej tabeli nowego produktu o cenie np. 7 zá. Z tego powodu drugie wykonanie tego samego zapytania zwróciáoby ju 102 wiersze. Domy lnie skonfigurowane serwery bazodanowe dopuszczaj odczyty widma. 4. Trwaáe (ang. Durability). Trwaáo ü transakcji gwarantuje, e efekty zatwierdzonych transakcji b d zapisane w bazie, nawet w przypadku awarii serwera SQL 2005. Do przywrócenia spójno ci danych serwery bazodanowe z reguáy u ywaj jakiej formy dziennika transakcyjnego. Pierwsze litery cech transakcji (A — Atomicity, C — Consistency, I — Isolation, D — Durability) tworzñ skrót ACID, powszechnie u ywany do opisywania reguä przetwarzania danych, których muszñ przestrzegaè serwery bazodanowe, eby mogäy zostaè nazwane transakcyjnymi lub relacyjnymi. Transakcyjne przetwarzanie danych Serwery bazodanowe mog dziaáaü w trybie niejawnego zatwierdzania transakcji (w ser- werze SQL 2008 taki tryb jest trybem domy lnym). Oznacza to, e u ytkownicy nie musz samodzielnie rozpoczynaü transakcji, bo serwer robi to za nich. W trybie niejawnego zatwierdzania transakcji wykonanie ka dej instrukcji j zyka SQL skáada si z trzech etapów: 1. Serwer bazodanowy automatycznie rozpoczyna now transakcj . 2. Wykonywana jest pojedyncza instrukcja SQL. 3. Je eli instrukcja zostaáa wykonana z powodzeniem, transakcja jest zatwierdzana, w przeciwnym przypadku jest wycofywana. Taki sposób dziaäania oznacza, e u ytkownicy nie mogñ samodzielnie zatwierdzaè lub wycofywaè automatycznie rozpoczötych transakcji. Dlatego nazywa siö on trybem niejawnego zatwierdzania transakcji. Poni szy przykáad ilustruje dziaáanie trybu niejawnego zatwierdzania transakcji za po- moc funkcji systemowej @@TRANCOUNT zwracaj cej liczb otwartych, aktywnych w danym momencie transakcji:
  • 10. 200 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE SELECT @@TRANCOUNT; UPDATE Production.Product SET Color='Red' WHERE ProductID=1; SELECT @@TRANCOUNT; ------------------------------------------------------------ 0 0 Przed rozpocz ciem i po zako czeniu wykonywania instrukcji UPDATE nie byáo adnych otwartych transakcji. Tryb jawnego zatwierdzania transakcji W niektórych serwerach bazodanowych (np. w serwerze Oracle) domy lnym trybem transakcyjnego przetwarzania danych jest tryb ich jawnego zatwierdzania. W tym trybie wykonanie ka dej instrukcji j zyka SQL przebiega nast puj co: 1. Serwer bazodanowy automatycznie rozpoczyna now transakcj . 2. Wykonywana jest pojedyncza instrukcja SQL. 3. U ytkownik samodzielnie musi zatwierdziü lub wycofaü otwart przez serwer transakcj . Dziaáanie tego trybu mo na zasymulowaü w serwerze SQL 2008, ustawiaj c opcj sesji IMPLICIT_TRANSACTIONS: SET IMPLICIT_TRANSACTIONS ON; SELECT @@TRANCOUNT; UPDATE Production.Product SET Color='Red' WHERE ProductID=1; SELECT @@TRANCOUNT; ------------------------------------------------------------ 0 1 Tym razem przed rozpocz ciem instrukcji UPDATE równie nie byáo otwartych trans- akcji, ale niejawnie rozpocz ta transakcja nie zostaáa po jej wykonaniu automatycznie zamkni ta. Musi to zrobiü sam u ytkownik — albo zatwierdzaj c wprowadzone zmiany, albo je wycofuj c. Przed przej ciem do dalszych üwicze zako cz transakcj i wyá cz omawiany tryb: COMMIT TRAN; SET IMPLICIT_TRANSACTIONS OFF; Tryb jawnego zatwierdzania transakcji pozwala wycofywaè przypadkowe lub bäödne modyfikacje, ale zatwierdzanie transakcji, której samemu siö nie rozpoczöäo, jest maäo intuicyjne.
  • 11. Rozdziaä 9. i Transakcje i wspóäbie no è 201 Rozpoczynanie transakcji Mechanizm transakcyjnego przetwarzania danych poka emy, jawnie rozpoczynaj c i ko cz c transakcje. Pozwoli nam to wykonaü w ramach poszczególnych transakcji dowoln liczb instrukcji oraz samodzielnie sterowaü czasem rozpocz cia i zako czenia poszczególnych transakcji. eby rozpocz ü transakcj , nale y wykonaü instrukcj BEGIN TRAN2: BEGIN TRAN; SELECT @@TRANCOUNT; ------------------------------------------------------------ 1 Je eli teraz w ramach tej samej sesji (czyli w tym samym oknie edytora SQL) zaktu- alizujemy ceny wybranych towarów i sprawdzimy liczb aktywnych transakcji, dowie- my si , e rozpocz ta przez nas transakcja nadal jest otwarta: UPDATE Production.Product SET ListPrice=1 WHERE ProductSubcategoryID=1; SELECT @@TRANCOUNT; ------------------------------------------------------------ 1 Dopóki transakcja, w ramach której przeprowadzili my dowolne zmiany, jest otwarta, mo emy je albo wycofaü, albo zatwierdziü. Poniewa serwer bazodanowy nie jest w sta- nie przewidzieü naszej decyzji, a jedn z cech transakcji jest jej odizolowanie, próba odczytania danych z tabeli Production.Product w ramach tej samej sesji sko czy si zupeánie inaczej ni ta sama próba wykonana przez innego u ytkownika. eby si o tym przekonaü: 1. W tym samym oknie kodu SQL wykonaj zapytanie: SELECT Name,ListPrice,ProductSubcategoryID FROM Production.Product WHERE ProductSubcategoryID<3 ORDER BY ProductSubcategoryID; ------------------------------------------------------------ Mountain-100 Silver, 38 1,0000 1 Mountain-100 Silver, 42 1,0000 1 Mountain-100 Silver, 44 1,0000 1 Mountain-100 Silver, 48 1,0000 1 … 2. Zostaáo ono natychmiast wykonane, a cena ka dego produktu z podkategorii 1 wynosi 1. 3. eby wykonaü to samo zapytanie jako inny u ytkownik, otwórz nowe okno edytora SQL3 i skopiuj do niego powy sz instrukcj SELECT (rysunek 9.1). 2 W niektórych serwerach bazodanowych transakcje rozpoczyna si instrukcjami BEGIN TRANSACTION lub BEGIN WORK. 3 Mo na to zrobiü, naciskaj c kombinacj klawiszy Ctrl+N lub klikaj c przycisk New Query.
  • 12. 202 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE Rysunek 9.1. Zapytanie wykonuje si ju prawie dwie minuty, ale wci nie zwróciáo adnych danych Transakcyjne przetwarzanie danych polega na takim realizowaniu ñdaþ klientów przez serwery bazodanowe, eby ka dy z nich miaä wra enie, e jest jedynym u yt- kownikiem serwera. Wymaga to opisanego w dalszej czö ci rozdziaäu blokowania obiektów, do których w danym momencie odwoäujñ siö inni u ytkownicy serwera. Wycofywanie transakcji Wycofanie transakcji oznacza przywrócenie danych do stanu sprzed jej rozpo- cz cia i zdj cie wszystkich zaáo onych na potrzeby transakcji blokad. Je eli wrócimy do pierwszego okna edytora SQL (tego, w którym zapytanie zwróciáo wyniki) i wyko- namy w nim instrukcj ROLLBACK TRAN4, a nast pnie przeá czymy si do drugiego okna edytora SQL, przekonamy si , e zapytanie wreszcie zostaáo wykonane i w dodatku ceny produktów z pierwszej podkategorii wcale nie wynosz 1. Spowodowane jest to wycofaniem transakcji, w ramach której ceny byáy zmienione, i zdj ciem zaáo onych na jej potrzeby blokad: 4 W niektórych serwerach bazodanowych transakcje wycofuje si instrukcjami ROLLBACK TRANSACTION lub ROLLBACK WORK.
  • 13. Rozdziaä 9. i Transakcje i wspóäbie no è 203 SELECT Name,ListPrice,ProductSubcategoryID FROM Production.Product WHERE ProductSubcategoryID<3 ORDER BY ProductSubcategoryID; ------------------------------------------------------------ Mountain-100 Silver, 38 3399,9900 1 Mountain-100 Silver, 42 3399,9900 1 Mountain-100 Silver, 44 3399,9900 1 Mountain-100 Silver, 48 3399,9900 1 Mountain-100 Black, 38 3374,9900 1 Zatwierdzanie transakcji Zatwierdzenie transakcji oznacza utrwalenie wprowadzonych w jej trakcie zmian i zdj cie wszystkich zaáo onych na potrzeby transakcji blokad. Wspomniany na pocz tku rozdziaáu przykáad przelania pieni dzy z jednego konta na drugie mógáby byü zaimplementowany w poni szy sposób: BEGIN TRAN; EXEC uspDodajDoKonta '123-456-78-90', 500; EXEC uspOdejmijOdKonta '231-645-87-09', 500; IF @@ERROR=0 COMMIT TRAN; ELSE ROLLBACK TRAN; Po jawnym rozpocz ciu transakcji nast puje wywoáanie dwóch (nieistniej cych w bazie AdventureWorks) procedur. Je eli adna z nich nie zgáosi bá du, caáa transakcja b dzie zatwierdzona (zatwierdziü transakcj mo emy, wykonuj c instrukcj COMMIT TRAN5), w przeciwnym przypadku zostanie ona wycofana. Zagnie d anie transakcji Wi kszo ü serwerów bazodanowych pozwala zagnie d aü transakcje, czyli wykonaü instrukcj BEGIN TRAN w ramach wcze niej rozpocz tej transakcji. Wynikiem takiej ope- racji jest zwi kszenie licznika otwartych transakcji, a nie rozpocz cie nowej (atomowej, niepodzielnej, trwaáej i spójnej) transakcji. Dziaáanie mechanizmu zagnie d ania transakcji ilustruje poni szy przykáad: wykona- nie instrukcji BEGIN TRAN powoduje zwi kszenie o jeden licznika otwartych transakcji, wykonie instrukcji COMMIT TRAN zmniejsza warto ü tego licznika o jeden, ale wykonanie instrukcji ROLLBACK zamyka transakcje i zeruje licznik otwartych transakcji: 5 W niektórych serwerach bazodanowych transakcje zatwierdza si instrukcjami COMMIT TRANSACTION lub COMMIT WORK.
  • 14. 204 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE BEGIN TRAN; SELECT @@TRANCOUNT; BEGIN TRAN; SELECT @@TRANCOUNT; BEGIN TRAN; SELECT @@TRANCOUNT; COMMIT TRAN; SELECT @@TRANCOUNT; ROLLBACK TRAN; SELECT @@TRANCOUNT; ------------------------------------------------------------ 1 2 3 2 0 Punkty przywracania Wi kszo ü serwerów bazodanowych pozwala wycofaü nie tylko caá transakcj , ale te jej cz ü. W tym celu nale y w trakcie transakcji wykonaü instrukcj SAVE TRAN6, a nast pnie przywróciü j do danego punktu: BEGIN TRAN; INSERT INTO HumanResources.Department (Name, GroupName) VALUES ('TEST1', 'G1'); SAVE TRAN PP1; INSERT INTO HumanResources.Department (Name, GroupName) VALUES ('TEST2', 'G1'); SELECT @@TRANCOUNT; ROLLBACK TRAN PP1; SELECT @@TRANCOUNT; ------------------------------------------------------------ 1 1 Poniewa przywrócenie stanu transakcji do okre lonego punktu nie powoduje jej za- ko czenia (liczba otwartych transakcji nadal wynosi 1), musimy j zatwierdziü lub wycofaü: COMMIT TRAN; SELECT * FROM HumanResources.Department WHERE Name LIKE 'TEST_'; ------------------------------------------------------------ 26 TEST1 G1 2008-01-27 10:02:34.690 Poniewa druga instrukcja INSERT zostaáa wykonana po zdefiniowaniu punktu przy- wracania PP1, instrukcja ROLLBACK TRAN PP1 przywróciáa stan danych do momentu sprzed jej wykonania, i w rezultacie tyko pierwszy wiersz zostaá na trwaáe wstawiony do tabeli. 6 W niektórych serwerach bazodanowych punkty przywracania tworzy si instrukcjami SAVE TRANSACTION lub SAVE WORK.
  • 15. Rozdziaä 9. i Transakcje i wspóäbie no è 205 Wspóäbie no è Wspóábie no ü to zdolno ü systemu do jednoczesnego realizowania wielu operacji, z reguáy uzyskiwana poprzez uruchomienie osobnych procesów (robotników) na po- trzeby obsáugi poszczególnych da . Wspóäbie no è ma ogromny wpäyw na skalowalno è serwerów bazodanowych, czyli ich zdolno è do coraz szybszego wykonywania transakcji dziöki rozbudowywaniu komputerów, na przykäad zwiökszaniu ich mocy obliczeniowej czy przepustowo ci dysków twardych. eby ka dy z kilkuset czy nawet kilku tysi cy jednoczesnych u ytkowników serwera bazodanowego mógá pracowaü tak, jakby byá jego jedynym u ytkownikiem, konieczne jest odizolowanie od siebie poszczególnych transakcji. Umo liwiaj to automatycznie zakáadane blokady. Blokady Pomijaj c analizy wewn trznych mechanizmów dziaáania ró nych serwerów bazoda- nowych, blokady mo na podzieliü ze wzgl du na ich tryb (sposób blokowania) i zakres (typ blokowanych zasobów). Tryby blokad Tryb blokady decyduje o tym, czy mo liwe b dzie jej zaáo enie na zasobie wcze niej zablokowanym przez inny proces: 1. Blokady wspóádzielone S (ang. Shared) s domy lnie zakáadane na odczytywanych obiektach, takich jak tabele czy wiersze. Na obiekt zablokowany w trybie S inne procesy te mog zaáo yü blokad S, czyli odczytuj cy nie blokuj innych odczytuj cych. Blokady S domy lnie zakáadane s tylko na czas wykonywania zapytania, a nie caáej transakcji. 2. Blokady wyá czne X (ang. eXclusive) s zakáadane na modyfikowanych obiektach. Blokady X s niekompatybilne z innymi blokadami, czyli modyfikuj cy blokuj innych u ytkowników. W przeciwie stwie do blokad wspóádzielonych, blokady wyá czne domy lnie utrzymywane s do zako czenia caáej transakcji, a nie pojedynczej operacji. Zakresy blokad Blokady mog byü zakáadane na poziomie poszczególnych wierszy, kluczy indeksów, stron, zakresów lub caáych tabel. Te obiekty tworz naturaln hierarchi : tabela skáada si z wielu stron, na ka dej stronie zapisanych jest wiele wierszy itd. Z tego powodu serwery bazodanowe musz analizowaü wszystkie istniej ce blokady, zanim zaáo now — je eli choü jeden wiersz tabeli jest zablokowany w trybie X, nie mo na na caáej tabeli zaáo yü innej blokady.
  • 16. 206 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE Im wiöksze obiekty sñ blokowane, tym mniejsza wspóäbie no è (bo u ytkownicy muszñ däu ej czekaè na dostöp do zablokowanych zasobów), ale równie tym mniej- sza liczba blokad, którymi musi zarzñdzaè serwer bazodanowy (zaäo y jednñ blokadö na caäej tabeli zamiast miliona blokad na poszczególnych wierszach). Zakleszczenia Zakleszczenie (ang. DeadLock) ma miejsce, gdy ró ne procesy blokuj si nawzajem w taki sposób, e aden z nich nie jest w stanie zaáo yü wymaganych do uko czenia ju rozpocz tych operacji blokad. Najcz ciej wyst puj dwa typy zakleszcze : 1. Zakleszczenia cykliczne, wynikaj ce z tego, e dwa procesy w ró nych kolejno ciach próbuj uzyskaü dost p do tych samych zasobów. 2. Zakleszczenia konwersji blokad, zwi zane ze zmian wcze niej zaáo onej blokady wspóádzielonej (wiele procesów mo e jednocze nie zablokowaü ten sam zasób w trybie S) na blokad wyá czn (tylko jeden proces mo e zaáo yü na tym samym obiekcie blokad X). Serwery bazodanowe automatycznie wykrywaj zakleszczenia i przerywaj dziaáanie jednego procesu. Na ofiar zakleszczenia wybierany jest proces o ni szym prioryte- cie, a je eli oba procesy maj ten sam priorytet, ofiar zakleszczenia zostaje ten, którego wycofanie jest mniej kosztowne. Mechanizm wykrywania i usuwania zakleszcze pokazuje poni szy przykáad: Pierwszy u ytkownik w ramach jawnie rozpocz tej transakcji modyfikuje kilka danych w tabeli HumanResources.Department: BEGIN TRAN; UPDATE HumanResources.Department SET Name = UPPER(Name) WHERE DepartmentID>5; ------------------------------------------------------------ (18 row(s) affected) Nast pnie inny u ytkownik w ramach jawnie rozpocz tej przez siebie transakcji mo- dyfikuje znacznie wi cej danych w tabeli Production.Product7: BEGIN TRAN; UPDATE Production.Product SET Name = UPPER(Name) WHERE ProductID >300; ------------------------------------------------------------ (500 row(s) affected) 7 Zasymulowaü jednoczesn prac dwóch u ytkowników mo emy, otwieraj c nowe okno edytora SQL — ka de z okien nawi zuje wáasn sesj z baz danych.
  • 17. Rozdziaä 9. i Transakcje i wspóäbie no è 207 Nast pnie pierwszy u ytkownik próbuje odczytaü zawarto ü tabeli zablokowanej ju przez 2. sesj (okno wyników mo e pokazaü pierwszych kilkadziesi t wierszy, ale i tak u ytkownik b dzie musiaá czekaü na mo liwo ü zablokowania w trybie S pozostaáych wierszy tabeli Production.Product): SELECT * FROM Production.Product; W tym momencie nie wyst piáo jeszcze zakleszczenie — wystarczyáoby, eby drugi u ytkownik zako czyá swoj transakcj . Ale je eli w ramach 2. sesji u ytkownik spró- buje odczytaü zawarto ü tabeli zmodyfikowanej przez pierwszego u ytkownika, oba procesy si zakleszcz : SELECT * FROM HumanResources.Department; ------------------------------------------------------------ 1 Engineering Research and Development 1998-06-01 00:00:00.000 2 Tool Design Research and Development 1998-06-01 00:00:00.000 3 Sales Sales and Marketing 1998-06-01 00:00:00.000 … Po chwili drugie zapytanie zostaáo jednak wykonane, co wi cej, nazwy departamentów nie zostaáy przekonwertowane na du e litery. eby przekonaü si , dlaczego tak si staáo, wystarczy przeá czyü si do okienka 1. sesji. Znajdziemy w nim poni szy ko- munikat bá du: Msg 1205, Level 13, State 51, Line 2 Transaction (Process ID 57) was deadlocked on lock resources with another process ´and has been chosen as the deadlock victim. Rerun the transaction. Je eli sprawdzimy liczb otwartych w ramach 1. sesji transakcji, oka e si , e jawnie rozpocz ta przez pierwszego u ytkownika transakcja zostaáa — zgodnie z komunikatem bá du — wycofana: SELECT @@TRANCOUNT; ------------------------------------------------------------ 0 Poniewa wycofanie transakcji wi e si ze zdj ciem zaáo onych na jej potrzeby blokad, druga sesja mogáa z powodzeniem zako czyü operacje i odczytaü tabel HumanResources. ´Department. Liczba transakcji otwartych w ramach 2. sesji nadal wynosi 1 — eby zako czyü üwiczenie i wycofaü zmiany, nale y wykonaü w tym oknie edytora SQL instrukcj ROLLBACK TRAN. Poziomy izolowania transakcji Mo emy wpáywaü na sposób zakáadania blokad przez serwery bazodanowe, zmieniaj c poziom izolowania transakcji. Wi kszo ü serwerów pozwala ustawiü (na poziomie serwera, bazy danych lub poszczególnych sesji) jeden z czterech poziomów izolo- wania transakcji, przedstawionych przez nas od najmniej restrykcyjnego, w którym
  • 18. 208 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE maksymalna wspóábie no ü okupiona jest wyst powaniem najwi kszej liczby typów nie- spójno ci danych, do najbardziej restrykcyjnego, który kosztem ograniczenia wspóábie - no ci gwarantuje najwy szy poziom spójno ci danych. Read Uncommitted W trybie niezatwierdzonego odczytu (ang. Read Uncommitted) odczyt danych nie po- woduje zaáo enia blokady wspóádzielonej. Na tym poziomie wyst puj brudne od- czyty, niepowtarzalne odczyty i odczyty widma (jedynym niekorzystnym zjawi- skiem niewyst puj cym na tym poziomie jest utrata aktualizacji). eby si o tym przekonaü: 1. W jednej sesji (oknie edytora SQL) rozpoczniemy transakcj i zaktualizujemy nazw dziaáu: BEGIN TRAN; UPDATE HumanResources.Department SET Name = 'ZmianaWToku' WHERE DepartmentID=5; ------------------------------------------------------------ (1 row(s) affected) 2. W drugiej sesji zmienimy poziom izolowania transakcji na Read Uncommitted i spróbujemy odczytaü modyfikowane przez innego u ytkownika dane: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT Name FROM HumanResources.Department WHERE DepartmentID = 5; ------------------------------------------------------------ ZmianaWToku Udaáo nam si odczytaü dane, pomimo e osoba, która je zmieniaáa, nie zatwierdziáa jeszcze transakcji, a wi c w ka dej chwili mo e j wycofaü. W tym trybie (cz sto wymuszanym na poziomie poszczególnych instrukcji za pomoc specyficznych dla danego serwera bazodanowego dyrektyw optymalizatora) mo na odczytywaü dane, o których wiemy, e nie b d w tym samym czasie modyfikowane. Ko cz c üwiczenie, zamknij bez zatwierdzania otwartej transakcji i na nowo otwórz oba okna edytora SQL — w ten sposób kolejne üwiczenie rozpoczniemy, pracuj c w domy lnym trybie izolowania transakcji. Read Committed Tryb odczytu zatwierdzonego (ang. Read Committed) jest domy lnym poziomem izolowania transakcji. Na tym poziomie odczyt danych wymaga zaáo enia na nich blokady wspóádzielonej. Poniewa zakáadana na czas zmiany blokada X jest niekom- patybilna z innymi blokadami, w tym z blokad S, eliminuje to brudne odczyty. Jednak na tym poziomie nadal wyst puj niepowtarzalne odczyty i odczyty widma.
  • 19. Rozdziaä 9. i Transakcje i wspóäbie no è 209 Zjawisko niepowtarzalnego odczytu pokazuje poni szy przykáad: 1. W pierwszym oknie edytora SQL ustawiamy tryb odczytów zatwierdzonych8, jawnie rozpoczynamy transakcj i odczytujemy nazw wybranego departamentu: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRAN; SELECT Name FROM HumanResources.Department WHERE DepartmentID = 5; ------------------------------------------------------------ Purchasing 2. W tym momencie transakcja jest nadal otwarta, a my w drugim oknie edytora SQL zmienimy nazw tego departamentu: UPDATE HumanResources.Department SET Name = 'OdczytWToku' WHERE DepartmentID=5; ------------------------------------------------------------ (1 row(s) affected) 3. Je eli pierwszy u ytkownik w ramach tej samej transakcji ponownie odczyta nazw departamentu, uzyska inny wynik: SELECT Name FROM HumanResources.Department WHERE DepartmentID = 5; COMMIT TRAN; ------------------------------------------------------------ OdczytWToku Repeatable Read W trybie powtarzalnego odczytu (ang. Repeatable Read) blokady wspóádzielone S utrzymywane s do czasu zako czenia caáej transakcji. Dzi ki temu inny proces nie mo e zmodyfikowaü odczytywanych w jej ramach danych, co eliminuje niepowtarzalne odczyty. Na tym poziomie wyst puj tylko odczyty widma. Zjawisko odczytu widma pokazuje poni szy przykáad: 1. W ramach pierwszej sesji zmienimy poziom izolowania transakcji na Repeatable Read i w ramach jawnie rozpocz tej transakcji odczytamy nazwy towarów o cenach pomi dzy 10 a 15 dolarów: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN TRAN; SELECT Name FROM Production.Product WHERE ListPrice BETWEEN 10 AND 15; ------------------------------------------------------------ Taillights - Battery-Powered 8 Poniewa ten tryb jest trybem domy lnym, instrukcja SET dodana jest tylko w celach demonstracyjnych.
  • 20. 210 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE 2. Podczas gdy pierwsza transakcja jest wci otwarta, w drugim oknie edytora SQL zmienimy cen jednego towaru na 12 dolarów: UPDATE Production.Product SET ListPrice = 12 WHERE ProductID =2; ------------------------------------------------------------ (1 row(s) affected) 3. Je eli pierwszy u ytkownik raz jeszcze wykona, w ramach tej samej transakcji, to samo zapytanie, tym razem jego wynik b dzie liczyá dwa wiersze — pojawi si w nim wiersz widmo: SELECT Name FROM Production.Product WHERE ListPrice BETWEEN 10 AND 15; ------------------------------------------------------------ Bearing Ball Taillights - Battery-Powered 4. Je eli jednak w ramach drugiej sesji spróbujemy zmieniü dane odczytywane w ramach nadal otwartej pierwszej transakcji (czyli doprowadziü do niepowtarzalnego odczytu), instrukcja b dzie oczekiwaü, a pierwsza transakcja zostanie zako czona, a zaáo one dla niej blokady zdj te: UPDATE Production.Product SET ListPrice = 8 WHERE Name = 'Taillights - Battery-Powered'; 5. eby powy sza aktualizacja zostaáa wykonana, w pierwszym oknie edytora SQL wykonaj instrukcj COMMIT TRAN. W trybie Repeatable Read nale y odczytywaü te dane, które w ramach transakcji odczytywane s kilkukrotnie i mog byü zmieniane w tym samym czasie przez innych u ytkowników. Sytuacja taka ma miejsce np. w ró nego rodzaju zestawieniach i raportach zbiorczych, w których odczytuj c te same dane, za ka dym razem musimy otrzymaü te same wyniki, inaczej zestawienie lub raport b d niespójne. Serializable W trybie szeregowania transakcje odwoáuj ce si do tych samych tabel wykonywane s jedna po drugiej. Blokowanie caáych obiektów, a nie tylko odczytywanych danych, na czas trwania transakcji pozwala wyeliminowaü odczyty widma, ale powoduje, e odczytuj c nawet jeden wiersz tabeli, mo emy uniemo liwiü pozostaáym u ytkownikom zmodyfikowanie przechowywanych w niej danych. eby si o tym przekonaü: 1. W pierwszym oknie edytora SQL przeá czymy si do trybu szeregowania, jawnie rozpoczniemy transakcj i odczytamy informacje o wybranym towarze: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRAN; SELECT ProductID, Name FROM Production.Product
  • 21. Rozdziaä 9. i Transakcje i wspóäbie no è 211 WHERE ListPrice BETWEEN 10 AND 15; ------------------------------------------------------------ 2 Bearing Ball 2. Je eli teraz w drugim oknie edytora SQL spróbujemy zmieniü cen innego towaru, oka e si , e aktualizacja zostaáa zablokowana i b dzie wykonana dopiero po zako czeniu pierwszej transakcji: UPDATE Production.Product SET ListPrice = 120 WHERE ProductID =3; 3. Ko cz c üwiczenie, zamknij oba okna edytora SQL bez zatwierdzania rozpocz tej w jednym z nich transakcji. W trybie Serializable mamy gwarancj , e odczytywane w ramach transakcji dane zawsze b d takie same — serwer bazodanowy nie dopu ci nie tylko do ich zmiany, ale równie do pojawienia si nowych danych. Jednak przez ten czas pozostali u yt- kownicy nie b d mogli modyfikowaü zablokowanych tabel. W wi kszo ci przypad- ków powoduje to tak znaczne wydáu enie czasu reakcji serwera, e lepiej jest skopio- waü odczytywane dane9, a je eli zmian nie jest zbyt du o, przeá czyü si do modelu optymistycznego. Model optymistyczny W modelu optymistycznym tylko modyfikuj cy blokuj innych modyfikuj cych, czyli ró ni u ytkownicy mog jednocze nie modyfikowaü i odczytywaü te same dane. Serwery bazodanowe zapewniaj spójno ü modyfikowanych w tym modelu danych poprzez ich wersjonowanie. Zakáadaj c (optymistycznie), e w czasie gdy jeden u yt- kownik odczytuje dane, inni raczej nie b d ich modyfikowaü, s one w stanie na bie co zarz dzaü dodatkowymi wersjami danych. Je eli to zaáo enie jest prawdziwe, czyli je eli jednoczesne modyfikacje i odczyty tych samych danych nie zachodz zbyt cz sto, mo emy znacznie skróciü czas reak- cji serwera10, przeá czaj c baz do optymistycznego modelu wspóábie no ci. eby si o tym przekonaü: 1. W pierwszym oknie edytora SQL wykonamy poni sze instrukcje, przeá czaj c baz AdventureWorks do modelu optymistycznego: USE master; ALTER DATABASE AdventureWorks SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE; ------------------------------------------------------------ Command(s) completed successfully. 9 Niektóre serwery bazodanowe pozwalaj utworzyü migawk (ang. Snapshot) danych. 10 Niektóre serwery bazodanowe, np. serwer Oracle, domy lnie dziaáaj w optymistycznym modelu wspóábie no ci.
  • 22. 212 Czö è III i Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE 2. W tym samym oknie edytora SQL poá czymy si z baz AdventureWorks i w ramach jawnie rozpocz tej transakcji zmienimy dane dwóch pracowników: USE AdventureWorks; BEGIN TRAN; UPDATE HumanResources.Employee SET Title = 'X' WHERE EmployeeID <3; ------------------------------------------------------------ (2 row(s) affected) 3. W nowym oknie edytora SQL odczytamy dane o kilku pracownikach: SELECT EmployeeID, Title FROM HumanResources.Employee WHERE EmployeeID <5; ------------------------------------------------------------ 1 Production Technician - WC60 2 Marketing Assistant 3 Engineering Manager 4 Senior Tool Designer 4. Okazuje si , e tym razem zapytanie zostaáo wykonane natychmiast, ale z zachowaniem wymogów domy lnego trybu izolowania transakcji, czyli trybu Read Committed — pozostali u ytkownicy serwera odczytaj ostatni zatwierdzon wersj danych. Gdyby rozpocz ta w ramach pierwszej sesji transakcja zostaáa zatwierdzona, to ponowne wykonanie tego samego zapytania zwróciáoby najnowsz , zatwierdzon wersj , ze zmienionymi tytuáami dwóch pierwszych pracowników. Model pesymistyczny W modelu pesymistycznym odczytuj cy s blokowani przez modyfikuj cych (serwer b dzie czekaá z zaáo eniem blokady S, a zdj ta zostanie blokada X), a mody- fikuj cy przez odczytuj cych (zaáo enie blokady X wymaga zdj cia blokady S). Poniewa koszt zarz dzania wieloma wersjami tych samych danych ro nie wraz ze wzro- stem wersjonowanych danych, w tym modelu zakáada si (pesymistycznie), e odczy- tywane dane b d w tym samym czasie regularnie modyfikowane. eby przywróciü pesymistyczny (domy lny) model wspóábie no ci bazy AdventureWorks, nale y wykonaü poni sze instrukcje: USE master; ALTER DATABASE AdventureWorks SET READ_COMMITTED_SNAPSHOT OFF WITH ROLLBACK IMMEDIATE; ------------------------------------------------------------ Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
  • 23. Rozdziaä 9. i Transakcje i wspóäbie no è 213 Podsumowanie  Serwery bazodanowe przeprowadzaj wszystkie zmiany danych w ramach jawnie lub niejawnie rozpocz tych transakcji.  Transakcje powinny byü otwierane jak najpó niej i zamykane jak najwcze niej.  Transakcje powinny zawieraü tylko powi zane ze sob instrukcje.  Przerwane, czy to z powodu awarii klienta, czy te serwera, transakcje b d wycofane.  Na czas trwania transakcji pewne obiekty bazy danych s automatycznie blokowane.  Serwery bazodanowe automatycznie wykrywaj zakleszczenia i usuwaj je poprzez wycofanie jednej z zakleszczonych transakcji.  Odizolowanie, jedn z czterech cech ACID transakcji, uzyskuje si za pomoc automatycznie zakáadanych i zwalnianych blokad.  Mo na sterowaü sposobem zakáadania i czasem trwania blokad, zmieniaj c poziom izolowania transakcji.  W modelu optymistycznym serwery bazodanowe wersjonuj dane, co poprawia wspóábie no ü kosztem wi kszego obci enia serwera. Zadania 1. Twoim zadaniem jest przygotowanie raportu podsumowuj cego roczn sprzeda . Wyliczaj c sumy i rednie warto ci sprzeda y produktów, kilkukrotnie musisz odczytaü tabel Production.Product. Jak zagwarantujesz poprawno ü wyników raportu? 2. Po przerwie na lunch u ytkownicy zgáaszaj , e próby dalszej pracy z baz danych ko cz si chwilowym „zawieszeniem” programu i wreszcie komunikatem bá du mówi cym, e serwer bazodanowy jest niedost pny. Po sprawdzeniu okazuje si , e serwer i sieü dziaáaj normalnie, a baza nie zostaáa uszkodzona. Co jest najbardziej prawdopodobn przyczyn problemu? 3. W ramach tworzonej procedury modyfikujesz du e ilo ci danych zapisanych w kilkunastu tabelach oraz wstawiasz jeden wiersz, informuj cy o wykonaniu wszystkich operacji, do tabeli znajduj cej si w bazie danych na zdalnym serwerze. Poá czenie pomi dzy serwerami jest mocno obci one i zdarza si , e czas nawi zywania sesji i przesyáania danych mi dzy serwerami wielokrotnie si wydáu a. Co zrobiü, eby w przypadku zgáoszenia przez procedur bá du braku poá czenia ze zdalnym serwerem nie trzeba byáo ponownie wykonywaü kosztownych modyfikacji danych?