1120

Praktyczny Kurs SQL. Wydanie II eBook

Embed Size (px)

Citation preview

  • Id do

    Spis treci Przykadowy rozdzia Skorowidz

    Katalog online

    Dodaj do koszyka

    Zamw cennik

    Zamw informacjeo nowociach

    Fragmenty ksiekonline

    Helion SAul. Kociuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected] Helion 19912011

    Katalog ksiek

    Twj koszyk

    Cennik i informacje

    Czytelnia

    Kontakt

    Zamw drukowanykatalog

    Praktyczny kurs SQL.Wydanie IIAutor: Danuta Mendrala, Marcin Szeliga ISBN: 978-83-246-3373-9Format: 158235, stron: 304

    Poznaj modele baz danych i standardy jzyka SQL Naucz si korzysta z instrukcji pobierania i modyfikacji danych Dowiedz si, jak tworzy i zmienia struktur bazy oraz zarzdza jej uytkownikami

    Opanuj jzyk SQL w praktyce!Bazy danych s dosownie wszdzie. Trudno sobie dzi bez nich wyobrazi funkcjonowanie nowoczesnej biblioteki, choby najmniejszego sklepu internetowego, biura rachunkowego czy nawet niewielkiego serwisu WWW. Uytkownicy korzystajcy z baz danych czsto nie maj nawet pojcia, w jaki sposb odbywa si dostp do informacji i jaki mechanizm jest za to odpowiedzialny. Na ignorancj t nie mog sobie jednak pozwoli osoby odpowiedzialne za tworzenie, zarzdzanie i konserwowanie baz danych. Powinny one zna przynajmniej jeden z popularnych serwerw bazodanowych i sprawnie posugiwa si jzykiem SQL stanowicym standardowe narzdzie komunikacji z relacyjnymi bazami.

    Jeli pragniesz doczy do ekskluzywnego grona administratorw baz danych lub chcesz zosta programist aplikacji bazodanowych, lecz przeszkadza Ci brak znajomoci SQL-a, signij po ksik Praktyczny kurs SQL. Wydanie II. W prosty i przystpny sposb prezentuje ona podstawowe pojcia i zasady rzdzce relacyjnym modelem baz danych, a take najwaniejsze cechyi konstrukcje jzyka SQL oraz metody ich wykorzystywania. Lektura ksiki umoliwi Ci poznanie instrukcji odpowiedzialnych za odczytywanie danych z bazy i ich zapisywanie oraz modyfikacj, jak rwnie tworzenie baz i zmian ich struktury. Poznasz te sposoby tworzenia rl i kont uytkownikw oraz zarzdzania ich uprawnieniami. Twoj wiedz ugruntuj praktyczne zadania koczce kady rozdzia, a zamieszczone na kocu ksiki rozwizania pomog skorygowa ewentualne bdy.

    Teoretyczne podstawy funkcjonowania baz danych Historia jzyka SQL i obowizujce standardy zapyta Odczytywanie, przeszukiwanie, czenie i grupowanie danych Korzystanie z podzapyta Zapisywanie, modyfikacja i usuwanie danych Transakcje i rwnolegy dostp do danych Tworzenie baz danych i modyfikacja ich struktury Korzystanie z widokw i indeksw Zarzdzanie uytkownikami, rolami i prawami dostpu do baz danych

    Dowiedz si, jak tworzy relacyjn baz danych i zarzdza ni za pomoc jzyka SQL

  • Spis treciWstp .............................................................................................. 9

    Cz I Troch teorii, czyli modele i standardy .......................... 17

    Rozdzia 1. Relacyjny model baz danych ........................................................... 19Tabele jako zbiory danych .............................................................................................. 19

    Kolumny maj niepowtarzalne nazwy i zawieraj okrelone typy danych ............... 20Wiersze powinny by unikalne ................................................................................ 21Kolejno kolumn jest bez znaczenia ....................................................................... 21Kolejno wierszy jest bez znaczenia ....................................................................... 22

    Bazy danych ................................................................................................................... 22Trzy modele baz danych: relacyjny, obiektowy i jednorodny ........................................ 23

    Model jednorodny .................................................................................................... 23Model relacyjny ....................................................................................................... 24Model obiektowy ..................................................................................................... 26

    Zaoenia relacyjnego modelu baz danych ..................................................................... 27Postulaty Codda dotyczce struktury danych ........................................................... 27Postulaty Codda dotyczce przetwarzania danych ................................................... 28Postulaty Codda dotyczce integralnoci danych ..................................................... 29Normalizacja ............................................................................................................ 29

    Podsumowanie ................................................................................................................ 31Zadania ........................................................................................................................... 31

    Rozdzia 2. Standardy jzyka SQL ..................................................................... 33Strukturalny jzyk zapyta ............................................................................................. 33

    Przetwarzanie zbiorw a przetwarzanie pojedynczych danych ................................ 34Jzyk deklaratywny a jzyk proceduralny ................................................................ 35Jzyk interpretowany a jzyk kompilowany ............................................................. 35Skadnia jzyka SQL ................................................................................................ 37Dialekty jzyka SQL ................................................................................................ 39

    Standardy ANSI .............................................................................................................. 40Historia ..................................................................................................................... 40SQL3 ........................................................................................................................ 41

    Podsumowanie ................................................................................................................ 44Zadania ........................................................................................................................... 44

  • 4 Praktyczny kurs SQL

    Cz II Pobieranie danych, czyli instrukcja SELECT ................... 47

    Rozdzia 3. Odczytywanie danych z wybranej tabeli ........................................... 49Klauzula FROM ............................................................................................................. 49

    W peni kwalifikowane nazwy obiektw ................................................................. 50Wybieranie kolumn ........................................................................................................ 51Eliminowanie duplikatw ............................................................................................... 52Wyraenia ....................................................................................................................... 54

    Operatory arytmetyczne ........................................................................................... 54czenie danych tekstowych .................................................................................... 55Funkcje systemowe .................................................................................................. 55

    Formatowanie wynikw ................................................................................................. 58Aliasy ....................................................................................................................... 59Stae (literay) ........................................................................................................... 60

    Sortowanie wynikw ...................................................................................................... 60Sortowanie danych tekstowych ................................................................................ 63

    Podsumowanie ................................................................................................................ 65Zadania ........................................................................................................................... 65

    Rozdzia 4. Wybieranie wierszy ......................................................................... 67Logika trjwartociowa .................................................................................................. 67

    Warto NULL ......................................................................................................... 68Operatory logiczne ................................................................................................... 68

    Klauzula WHERE .......................................................................................................... 70Standardowe operatory porwnania ......................................................................... 71Operatory SQL ......................................................................................................... 72Zoone warunki logiczne ........................................................................................ 75

    Klauzula TOP ................................................................................................................. 78Stronicowanie wierszy .................................................................................................... 79Wydajne wyszukiwanie danych ...................................................................................... 80

    W jaki sposb serwery bazodanowe odczytuj dane? .............................................. 81W jakiej kolejnoci serwery bazodanowe wykonuj poszczeglne

    klauzule zapyta? .................................................................................................. 84Argumenty SARG .................................................................................................... 85

    Podsumowanie ................................................................................................................ 87Zadania ........................................................................................................................... 87

    Rozdzia 5. czenie tabel i wynikw zapyta ................................................... 89Zczenia naturalne i nienaturalne .................................................................................. 89

    Klucze obce .............................................................................................................. 90Aliasy ....................................................................................................................... 93

    Zczenia rwnociowe i nierwnociowe ..................................................................... 94Zczenia zewntrzne ..................................................................................................... 96

    Zczenie lewostronne .............................................................................................. 97Zczenie prawostronne ............................................................................................ 97Zczenie obustronne ................................................................................................ 98

    Zczenie krzyowe (iloczyn kartezjaski) ..................................................................... 98Zczenia wielokrotne ................................................................................................... 100

    Okrelanie kolejnoci zcze ................................................................................ 103Zczenie tabeli z ni sam ........................................................................................... 104

    Eliminacja duplikatw ............................................................................................ 105Klucze obce w obrbie jednej tabeli ....................................................................... 106

  • Spis treci 5

    czenie wynikw zapyta ........................................................................................... 107Suma ....................................................................................................................... 108Cz wsplna ........................................................................................................ 111Rnica ................................................................................................................... 111

    czenie wierszy i wynikw funkcji tabelarycznych ................................................... 112Operator APPLY .................................................................................................... 113

    Podsumowanie .............................................................................................................. 115Zadania ......................................................................................................................... 115

    Rozdzia 6. Grupowanie wierszy ...................................................................... 117Funkcje grupujce ........................................................................................................ 117

    Funkcja COUNT() .................................................................................................. 118Funkcje SUM() i AVG() ........................................................................................ 119Funkcje MIN() i MAX() ......................................................................................... 120Inne funkcje grupujce ........................................................................................... 120Wyraenia .............................................................................................................. 121

    Klauzula GROUP BY ................................................................................................... 122Kolejno wykonywania klauzuli GROUP BY ...................................................... 125Operatory CUBE i ROLLUP .................................................................................. 126Operator GROUPING SETS .................................................................................. 129

    Wydajne grupowanie danych ....................................................................................... 132Niestandardowa klauzula OVER .................................................................................. 132

    Partycje ................................................................................................................... 134Funkcje rankingu .................................................................................................... 136

    Niestandardowe operatory PIVOT i UNPIVOT ........................................................... 137PIVOT .................................................................................................................... 137UNPIVOT .............................................................................................................. 140

    Klauzula HAVING ....................................................................................................... 141Podsumowanie .............................................................................................................. 143Zadania ......................................................................................................................... 144

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 144

    Rozdzia 7. Podzapytania ............................................................................... 145Czym s podzapytania? ................................................................................................ 145Podzapytania jako zmienne .......................................................................................... 146

    Podzapytania niepowizane .................................................................................... 146Podzapytania powizane ........................................................................................ 151

    Podzapytania jako rda danych ................................................................................. 156Tabele pochodne .................................................................................................... 157CTE ........................................................................................................................ 159Wyznaczanie trendw ............................................................................................ 165

    Operatory ...................................................................................................................... 169Operator EXISTS ................................................................................................... 170Operator ANY lub SOME ...................................................................................... 173Operator ALL ......................................................................................................... 177

    Podsumowanie .............................................................................................................. 178Zadania ......................................................................................................................... 179

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 179

  • 6 Praktyczny kurs SQL

    Cz III Modyfikowanie danych, czyli instrukcje INSERT,UPDATE, DELETE oraz MERGE .................................... 181

    Rozdzia 8. Modyfikowanie danych ................................................................. 183Wstawianie danych ....................................................................................................... 183

    Klucze podstawowe ................................................................................................ 184Wartoci domylne ................................................................................................. 185Warto NULL ....................................................................................................... 186Konstruktor wierszy ............................................................................................... 187Wstawianie wynikw zapyta ................................................................................ 187

    Usuwanie danych .......................................................................................................... 189Instrukcja DELETE ................................................................................................ 189Instrukcja TRUNCATE TABLE ............................................................................ 191

    Aktualizowanie danych ................................................................................................ 191Jednoczesne aktualizowanie wielu kolumn ............................................................ 192Wyraenia .............................................................................................................. 193Aktualizowanie danych wybranych na podstawie danych z innych tabel .............. 193Aktualizowanie danych za pomoc wyrae odwoujcych si do innych tabel .... 194

    Instrukcja MERGE ....................................................................................................... 194Podsumowanie .............................................................................................................. 196Zadania ......................................................................................................................... 196

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 197

    Rozdzia 9. Transakcje i wspbieno .......................................................... 199Waciwoci transakcji ................................................................................................. 199Transakcyjne przetwarzanie danych ............................................................................. 201

    Tryb jawnego zatwierdzania transakcji .................................................................. 202Rozpoczynanie transakcji ....................................................................................... 203Wycofywanie transakcji ......................................................................................... 204Zatwierdzanie transakcji ......................................................................................... 205Zagniedanie transakcji ........................................................................................ 205Punkty przywracania .............................................................................................. 206

    Wspbieno .............................................................................................................. 207Blokady .................................................................................................................. 207Zakleszczenia ......................................................................................................... 208Poziomy izolowania transakcji ............................................................................... 209Model optymistyczny ............................................................................................. 213Model pesymistyczny ............................................................................................. 214

    Podsumowanie .............................................................................................................. 215Zadania ......................................................................................................................... 215

    Cz IV Tworzenie baz danych, czyli instrukcje CREATE,ALTER i DROP ............................................................ 217

    Rozdzia 10. Bazy danych i tabele .................................................................... 219Tworzenie i usuwanie baz danych ................................................................................ 219Tworzenie i usuwanie tabel .......................................................................................... 222

    Schematy ................................................................................................................ 223Zmiana struktury tabeli ................................................................................................. 223Ograniczenia ................................................................................................................. 224

    NOT NULL ............................................................................................................ 224Klucz podstawowy ................................................................................................. 225Niepowtarzalno ................................................................................................... 227

  • Spis treci 7

    Warto domylna .................................................................................................. 227Warunek logiczny .................................................................................................. 228Klucz obcy ............................................................................................................. 228Ograniczenia a wydajno instrukcji modyfikujcych i odczytujcych dane ......... 231

    Podsumowanie .............................................................................................................. 232Zadania ......................................................................................................................... 233

    Rozdzia 11. Widoki i indeksy ........................................................................... 235Widoki .......................................................................................................................... 235

    Tworzenie i usuwanie widokw ............................................................................. 235Modyfikowanie widokw ....................................................................................... 238Korzystanie z widokw .......................................................................................... 238Zalety widokw ...................................................................................................... 243

    Indeksy ......................................................................................................................... 243Tworzenie, modyfikowanie i usuwanie indeksw .................................................. 245Porzdkowanie indeksw ....................................................................................... 247

    Podsumowanie .............................................................................................................. 248Zadania ......................................................................................................................... 249

    Cz V Uprawnienia uytkownikw,czyli instrukcje GRANT i REVOKE ................................ 251

    Rozdzia 12. Nadawanie i odbieranie uprawnie ................................................ 253Konta uytkownikw .................................................................................................... 253

    Zakadanie i usuwanie kont uytkownikw ............................................................ 254Role .............................................................................................................................. 255

    Tworzenie i usuwanie rl ....................................................................................... 255Przypisywanie rl do uytkownikw ..................................................................... 255Specjalna rola Public .............................................................................................. 256

    Uprawnienia ................................................................................................................. 256Nadawanie i odbieranie uprawnie ........................................................................ 257Dziedziczenie uprawnie ....................................................................................... 258Przekazywanie uprawnie ...................................................................................... 260Zasada minimalnych uprawnie ............................................................................. 261

    Podsumowanie .............................................................................................................. 261Zadania ......................................................................................................................... 262

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 262

    Dodatek A Rozwizania zada ....................................................................... 263Zadania z rozdziau 1. ................................................................................................... 263

    Zadanie 1. ............................................................................................................... 263Zadanie 2. ............................................................................................................... 264Zadanie 3. ............................................................................................................... 264

    Zadania z rozdziau 2. ................................................................................................... 265Zadanie 1. ............................................................................................................... 265Zadanie 2. ............................................................................................................... 265Zadanie 3. ............................................................................................................... 265

    Zadania z rozdziau 3. ................................................................................................... 266Zadanie 1. ............................................................................................................... 266Zadanie 2. ............................................................................................................... 267Zadanie 3. ............................................................................................................... 267Zadanie 4. ............................................................................................................... 268Zadanie 5. ............................................................................................................... 270

  • 8 Praktyczny kurs SQL

    Zadania z rozdziau 4. ................................................................................................... 271Zadanie 1. ............................................................................................................... 271Zadanie 2. ............................................................................................................... 272Zadanie 3. ............................................................................................................... 273Zadanie 4. ............................................................................................................... 274

    Zadania z rozdziau 5. ................................................................................................... 275Zadanie 1. ............................................................................................................... 275Zadanie 2. ............................................................................................................... 275Zadanie 3. ............................................................................................................... 276Zadanie 4. ............................................................................................................... 276

    Zadania z rozdziau 6. ................................................................................................... 277Zadanie 1. ............................................................................................................... 277Zadanie 2. ............................................................................................................... 278Zadanie 3. ............................................................................................................... 278Zadanie 4. ............................................................................................................... 279

    Zadania z rozdziau 7. ................................................................................................... 280Zadanie 1. ............................................................................................................... 280Zadanie 2. ............................................................................................................... 281Zadanie 3. ............................................................................................................... 282Zadanie 4. ............................................................................................................... 284

    Zadania z rozdziau 8. ................................................................................................... 285Zadanie 1. ............................................................................................................... 285Zadanie 2. ............................................................................................................... 286Zadanie 3. ............................................................................................................... 286Zadanie 4. ............................................................................................................... 288

    Zadania z rozdziau 9. ................................................................................................... 289Zadanie 1. ............................................................................................................... 289Zadanie 2. ............................................................................................................... 290Zadanie 3. ............................................................................................................... 290

    Zadania z rozdziau 10. ................................................................................................. 291Zadanie 1. ............................................................................................................... 291Zadanie 2. ............................................................................................................... 291Zadanie 3. ............................................................................................................... 292

    Zadania z rozdziau 11. ................................................................................................. 293Zadanie 1. ............................................................................................................... 293Zadanie 2. ............................................................................................................... 293Zadanie 3. ............................................................................................................... 294

    Zadania z rozdziau 12. ................................................................................................. 294Zadanie 1. ............................................................................................................... 294Zadanie 2. ............................................................................................................... 295Zadanie 3. ............................................................................................................... 295

    Skorowidz .................................................................................... 297

  • Rozdzia 9.

    Transakcjei wspbieno

    Czym s transakcje?

    Co oznacza skrt ACID?

    Jakie s zalety transakcyjnego przetwarzania danych?

    Na czym polega rnica pomidzy transakcjami zagniedonymia zagniedaniem transakcji?

    Co oznacza termin wspbieno?

    Po co serwery bazodanowe zakadaj blokady?

    Kiedy dochodzi do zakleszcze?

    Czy warto zmienia domylny poziom izolowania transakcji?

    W jakich sytuacjach optymistyczny model wspbienoci jest lepszyni pesymistyczny?

    Waciwoci transakcjiTransakcje gwarantuj spjno modyfikowanych informacji. Typowym przyka-dem transakcyjnego przetwarzania danych jest przeniesienie pienidzy z jednego kontana drugie. Taka operacja przebiega w dwch etapach:

    1. Zmniejszenie o pewn sum stanu konta X.

    2. Dodanie tej sumy do stanu konta Y.

  • 200 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    Gdyby po wykonaniu pierwszej operacji wystpi bd uniemoliwiajcy wykonaniedrugiej, z systemu zniknaby pewna suma pienidzy. Rwnie nieprzyjemnym zaskocze-niem dla waciciela byoby sprawdzenie przez niego stanu obu jego kont ju po odjciudanej sumy z pierwszego, ale przed jej dodaniem do drugiego konta.

    eby temu zapobiec, transakcje musz by:

    1. Niepodzielne (ang. Atomicity). Niepodzielno oznacza, e zatwierdzanes wszystkie wchodzce w skad transakcji instrukcje albo nie jest zatwierdzanaadna z nich. Innymi sowy, wszystkie wchodzce w skad transakcji instrukcjemusz by wykonane poprawnie jeeli cho jedna z nich zgosi bd, wszystkieprzeprowadzone w ramach transakcji zmiany zostan wycofane.

    2. Spjne (ang. Consistency). Ta cecha transakcji gwarantuje, e ich wykonanienie doprowadzi, nawet w przypadku awarii serwera, do utraty spjnoci danych.Poniewa wszystkie zmiany danych s wykonywane w ramach transakcji,przechowywane w bazach informacje zawsze bd spjne1.

    3. Izolowane (ang. Isolation). Izolowanie transakcji wymaga albo zablokowaniamodyfikowanych w ramach jednej z nich danych, albo utworzenia ich dodatkowejwersji. W zalenoci od obowizujcego w ramach serwera lub sesji klienckiejpoziomu izolowania transakcji, moe doj do nastpujcych sytuacji:

    a) Utrata aktualizacji (ang. Lost update) ma miejsce, gdy dwa procesy modyfikujjednoczenie te same dane. Przykadowo jeden uytkownik zmienia centowaru na 100 z, a drugi na 200. W takim przypadku jedna ze zmianzostanie utracona (zastpiona drug modyfikacj). Domylnie skonfigurowaneserwery bazodanowe nie dopuszczaj do utraty aktualizacji.

    b) Brudne odczyty (ang. Dirty reads) do takiej sytuacji dochodzi, gdy moliwejest odczytanie zmian niezatwierdzonych jeszcze przez inny proces. Jeeliproces odczytujcy nie zada zaoenia blokady na odczytywanych danych,uzyska do nich dostp nawet wtedy, kiedy wanie bd modyfikowane.Gdyby proces modyfikujcy wycofa wprowadzone zmiany, odczytane daneokazayby si niespjne. Domylnie skonfigurowane serwery bazodanowenie dopuszczaj brudnych odczytw.

    c) Niepowtarzalne odczyty (ang. Non-repeatable reads) maj miejsce,gdy powtrzenie w ramach transakcji tego samego odczytu daje inny wynik.Rnice w wynikach s spowodowane tym, e natychmiast po zakoczeniuodczytu (a nie po zakoczeniu caej transakcji) proces odczytujcy zdejmujeblokady zaoone na odczytywane dane. Niezablokowane dane mog byzmienione przez inny proces, a wic ich powtrne odczytanie da inny(niespjny) wynik. Domylnie skonfigurowane serwery bazodanowedopuszczaj niepowtarzalne odczyty.

    d) Odczyty widma (ang. Phantom reads) sytuacja taka ma miejsce, jeelipomidzy dwoma wykonanymi w ramach transakcji odczytami zmieni siliczba odczytywanych wierszy. Jeli np. podczas pierwszego odczytu w tabeli

    1 Przynajmniej w teorii. W praktyce bazy danych ulegaj uszkodzeniu, cho bardzo rzadko z winy

    serwerw bazodanowych.

  • Rozdzia 9. Transakcje i wspbieno 201

    Produkty znajdowao si 100 produktw o cenach niszych ni 10 z, instrukcjaSELECT * FROM Produkty WHERE Cena

  • 202 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    SELECT @@TRANCOUNT;------------------------------------------------------------00

    Jak wida, przed rozpoczciem i po zakoczeniu wykonywania instrukcji UPDATEnie byo adnych otwartych transakcji.

    Tryb jawnego zatwierdzania transakcji

    W niektrych serwerach bazodanowych (np. w serwerze Oracle) domylnym trybemtransakcyjnego przetwarzania danych jest tryb ich jawnego zatwierdzania. W tym trybiewykonanie kadej instrukcji jzyka SQL przebiega nastpujco:

    1. Serwer bazodanowy automatycznie rozpoczyna now transakcj.

    2. Wykonywana jest pojedyncza instrukcja SQL.

    3. Uytkownik samodzielnie musi zatwierdzi lub wycofa otwart przez serwertransakcj.

    Dziaanie tego trybu mona zasymulowa w serwerze SQL 2011, ustawiajc opcj sesjiIMPLICIT_TRANSACTIONS:

    SET IMPLICIT_TRANSACTIONS ON;SELECT @@TRANCOUNT;UPDATE dbo.ProduktySET [Koszt standardowy]=3WHERE [Kod produktu]='NWTC-82';SELECT @@TRANCOUNT;------------------------------------------------------------01

    Tym razem przed rozpoczciem instrukcji UPDATE rwnie nie byo otwartych trans-akcji, ale niejawnie rozpoczta transakcja nie zostaa po jej wykonaniu automatyczniezamknita. Musi to zrobi sam uytkownik albo zatwierdzajc wprowadzone zmiany,albo je wycofujc.

    Przed przejciem do dalszych wicze zakocz transakcj i wycz omawiany tryb:COMMIT TRAN;SET IMPLICIT_TRANSACTIONS OFF;

    Tryb jawnego zatwierdzania transakcji pozwala wycofywa przypadkowe lub bdnemodyfikacje, ale zatwierdzanie transakcji, ktra nie zostaa przez nas rozpoczta,jest mao intuicyjne.

  • Rozdzia 9. Transakcje i wspbieno 203

    Rozpoczynanie transakcji

    Mechanizm transakcyjnego przetwarzania danych pokaemy, jawnie rozpoczynajci koczc transakcje. Pozwoli nam to wykona w ramach poszczeglnych transakcjidowoln liczb instrukcji oraz samodzielnie sterowa czasem rozpoczcia i zakocze-nia poszczeglnych transakcji.

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

    Jeeli teraz w ramach tej samej sesji (czyli w tym samym oknie edytora SQL) zaktu-alizujemy ceny wybranych towarw i sprawdzimy liczb aktywnych transakcji, dowiemysi, e rozpoczta przez nas transakcja nadal jest otwarta:

    UPDATE dbo.ProduktySET [Cena katalogowa]=1WHERE Kategoria='Zupy'SELECT @@TRANCOUNT;------------------------------------------------------------1

    Dopki transakcja, w ramach ktrej przeprowadzilimy dowolne zmiany, jest otwarta,moemy je albo wycofa, albo zatwierdzi. Poniewa serwer bazodanowy nie jestw stanie przewidzie naszej decyzji, a jedn z cech transakcji jest jej odizolowanie,prba odczytania danych z tabeli dbo.Produkty w ramach tej samej sesji skoczy sizupenie inaczej ni ta sama prba wykonana przez innego uytkownika.

    eby si o tym przekona:

    1. W tym samym oknie kodu SQL wykonaj zapytanie:SELECT [Nazwa produktu], [Cena katalogowa], KategoriaFROM dbo.ProduktyWHERE Kategoria IN ('Zupy','Sosy')ORDER BY Kategoria;------------------------------------------------------------Northwind Traders Hot Pepper Sauce 21,05 SosyNorthwind Traders Tomato Sauce 17,00 SosyNorthwind Traders Curry Sauce 30,00 SosyNorthwind Traders Clam Chowder 1,00 ZupyNorthwind Traders Vegetable Soup 1,00 ZupyNorthwind Traders Chicken Soup 1,00 Zupy

    2. Zostao ono natychmiast wykonane, a cena kadej zupy wynosi 1.

    3. Aby wykona to samo zapytanie jako inny uytkownik, otwrz nowe oknoedytora SQL3 i skopiuj do niego powysz instrukcj SELECT (rysunek 9.1).

    2 W niektrych serwerach bazodanowych transakcje rozpoczyna si instrukcjami BEGIN TRANSACTION

    lub BEGIN WORK.

  • 204 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    Rysunek 9.1. Zapytanie wykonuje si ju prawie dwie minuty, ale wci nie zwrcio adnych danych

    Transakcyjne przetwarzanie danych polega na takim realizowaniu da klientwprzez serwery bazodanowe, eby kady klient mia wraenie, i jest jedynym uyt-kownikiem serwera. Wymaga to opisanego w dalszej czci rozdziau blokowaniaobiektw, do ktrych w danym momencie odwouj si inni uytkownicy serwera.

    Wycofywanie transakcji

    Wycofanie transakcji oznacza przywrcenie danych do stanu sprzed jej rozpo-czcia i zdjcie wszystkich zaoonych na potrzeby transakcji blokad. Jeeli wrcimydo pierwszego okna edytora SQL (tego, w ktrym zapytanie zwrcio wyniki) i wyko-namy w nim instrukcj ROLLBACK TRAN4, a nastpnie przeczymy si do drugiego oknaedytora SQL, przekonamy si, e zapytanie wreszcie zostao wykonane i w dodatkuceny produktw z pierwszej podkategorii wcale nie wynosz 1. Spowodowane jest towycofaniem transakcji, w ramach ktrej ceny byy zmienione, i zdjciem zaoonychna jej potrzeby blokad:

    3 Mona to zrobi, naciskajc kombinacj klawiszy Ctrl+N lub klikajc przycisk New Query.4 W niektrych serwerach bazodanowych transakcje wycofuje si instrukcjami ROLLBACK TRANSACTION

    lub ROLLBACK WORK.

  • Rozdzia 9. Transakcje i wspbieno 205

    SELECT [Nazwa produktu], [Cena katalogowa], KategoriaFROM dbo.ProduktyWHERE Kategoria IN ('Zupy','Sosy')ORDER BY Kategoria;------------------------------------------------------------Northwind Traders Hot Pepper Sauce 21,05 SosyNorthwind Traders Tomato Sauce 17,00 SosyNorthwind Traders Curry Sauce 30,00 SosyNorthwind Traders Clam Chowder 7,2375 ZupyNorthwind Traders Vegetable Soup 1,4175 ZupyNorthwind Traders Chicken Soup 1,4625 Zupy

    Zatwierdzanie transakcji

    Zatwierdzenie transakcji oznacza utrwalenie wprowadzonych w jej trakcie zmiani zdjcie wszystkich zaoonych na potrzeby transakcji blokad. Wspomniany napocztku rozdziau przykad przelania pienidzy z jednego konta na drugie mgby byzaimplementowany w taki sposb:

    BEGIN TRAN;EXEC uspDodajDoKonta '123-456-78-90', 500;EXEC uspOdejmijOdKonta '231-645-87-09', 500;IF @@ERROR=0COMMIT TRAN;

    ELSEROLLBACK TRAN;

    Po jawnym rozpoczciu transakcji nastpuje wywoanie dwch (nieistniejcych w przy-kadowej bazie danych) procedur. Jeeli adna z nich nie zgosi bdu, caa transakcjabdzie zatwierdzona (zatwierdzi transakcj moemy, wykonujc instrukcj COMMITTRAN5), w przeciwnym razie zostanie ona wycofana.

    Zagniedanie transakcji

    Wikszo serwerw bazodanowych pozwala zagnieda transakcje, czyli wykonainstrukcj BEGIN TRAN w ramach wczeniej rozpocztej transakcji. Wynikiem takiej ope-racji jest zwikszenie licznika otwartych transakcji, a nie rozpoczcie nowej (ato-mowej, niepodzielnej, trwaej i spjnej) transakcji.

    Dziaanie mechanizmu zagniedania transakcji ilustruje poniszy przykad: wykonanieinstrukcji BEGIN TRAN powoduje zwikszenie o jeden licznika otwartych transakcji,wykonanie instrukcji COMMIT TRAN zmniejsza warto tego licznika o jeden, ale wykona-nie instrukcji ROLLBACK TRAN zamyka transakcje i zeruje licznik otwartych transakcji:

    BEGIN TRAN;SELECT @@TRANCOUNT;

    5 W niektrych serwerach bazodanowych transakcje zatwierdza si instrukcjami COMMIT TRANSACTION

    lub COMMIT WORK.

  • 206 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    BEGIN TRAN;SELECT @@TRANCOUNT;BEGIN TRAN;SELECT @@TRANCOUNT;COMMIT TRAN;SELECT @@TRANCOUNT;ROLLBACK TRAN;SELECT @@TRANCOUNT;------------------------------------------------------------12320

    Punkty przywracania

    Wikszo serwerw bazodanowych pozwala wycofa nie tylko ca transakcj, lecztake jej cz. W tym celu naley w trakcie transakcji wykona instrukcj SAVE TRAN6,a nastpnie przywrci j do danego punktu:

    BEGIN TRAN;INSERT INTO dbo.Dostawcy(Firma)VALUES ('TEST1');SAVE TRAN PP1;INSERT INTO dbo.Dostawcy(Firma)VALUES ('TEST2');SELECT @@TRANCOUNT;ROLLBACK TRAN PP1;SELECT @@TRANCOUNT;------------------------------------------------------------11

    Poniewa przywrcenie stanu transakcji do okrelonego punktu nie powoduje jej zako-czenia (liczba otwartych transakcji nadal wynosi 1), musimy j zatwierdzi lub wycofa:

    SELECT ID, FirmaFROM dbo.DostawcyWHERE Firma LIKE 'TEST_';------------------------------------------------------------17 TEST1

    Jako e druga instrukcja INSERT zostaa wykonana po zdefiniowaniu punktu przy-wracania PP1, instrukcja ROLLBACK TRAN PP1 przywrcia stan danych do momentusprzed jej wykonania i w rezultacie tylko pierwszy wiersz zosta na trwae wstawionydo tabeli.

    6 W niektrych serwerach bazodanowych punkty przywracania tworzy si instrukcjami SAVE TRANSACTION

    lub SAVE WORK.

  • Rozdzia 9. Transakcje i wspbieno 207

    Wspbieno

    Wspbieno to zdolno systemu do jednoczesnego realizowania wielu operacji,z reguy uzyskiwana poprzez uruchomienie osobnych procesw (robotnikw) na potrzebyobsugi poszczeglnych da.

    Wspbieno ma ogromny wpyw na skalowalno serwerw bazodanowych, czyliich zdolno do coraz szybszego wykonywania transakcji dziki rozbudowywaniukomputerw, na przykad zwikszaniu ich mocy obliczeniowej czy przepustowocidyskw twardych.

    eby kady z kilkuset czy nawet kilku tysicy jednoczesnych uytkownikw serwerabazodanowego mg pracowa tak, jakby by jego jedynym uytkownikiem, koniecznejest odizolowanie od siebie poszczeglnych transakcji. Umoliwiaj to automatyczniezakadane blokady.

    Blokady

    Pomijajc analizy wewntrznych mechanizmw dziaania rnych serwerw bazoda-nowych, blokady mona podzieli ze wzgldu na ich tryb (sposb blokowania) i zakres(typ blokowanych zasobw).

    Tryby blokad

    Tryb blokady decyduje o tym, czy moliwe bdzie jej zaoenie na zasobie wczeniejzablokowanym przez inny proces:

    1. Blokady wspdzielone S (ang. Shared) s domylnie zakadanena odczytywanych obiektach, takich jak tabele czy wiersze. Na obiektzablokowany w trybie S inne procesy te mog zaoy blokad S, czyliodczytujcy nie blokuj innych odczytujcych. Blokady S domylniezakadane s tylko na czas wykonywania zapytania, a nie caej transakcji.

    2. Blokady wyczne X (ang. eXclusive) s zakadane na modyfikowanychobiektach. Blokady X s niekompatybilne z innymi blokadami, czyli modyfikujcyblokuj innych uytkownikw. W przeciwiestwie do blokad wspdzielonychblokady wyczne domylnie s utrzymywane do zakoczenia caej transakcji,a nie pojedynczej operacji.

    Zakresy blokad

    Blokady mog by zakadane na poziomie poszczeglnych wierszy, kluczy indeksw,stron, zakresw lub caych tabel. Te obiekty tworz naturaln hierarchi: tabela skadasi z wielu stron, na kadej stronie zapisanych jest wiele wierszy itd. Z tego powoduserwery bazodanowe musz analizowa wszystkie istniejce blokady, zanim zaonow jeeli cho jeden wiersz tabeli jest zablokowany w trybie X, nie mona nacaej tabeli zaoy innej blokady.

  • 208 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    Im wiksze obiekty s blokowane, tym mniejsza wspbieno (bo uytkownicy muszduej czeka na dostp do zablokowanych zasobw), ale rwnie tym mniejszaliczba blokad, ktrymi musi zarzdza serwer bazodanowy (zostanie zaoona jednablokada na caej tabeli zamiast miliona blokad na poszczeglnych wierszach).

    ZakleszczeniaZakleszczenie (ang. DeadLock) ma miejsce, gdy rne procesy blokuj si nawzajemw taki sposb, e aden z nich nie jest w stanie zaoy blokad wymaganych do uko-czenia ju rozpocztych operacji.

    Najczciej wystpuj dwa typy zakleszcze:

    1. Zakleszczenia cykliczne, wynikajce z tego, e dwa procesy w rnychkolejnociach prbuj uzyska dostp do tych samych zasobw.

    2. Zakleszczenia konwersji blokad, zwizane ze zmian wczeniej zaoonejblokady wspdzielonej (wiele procesw moe jednoczenie zablokowa tensam zasb w trybie S) na blokad wyczn (tylko jeden proces moe zaoyna tym samym obiekcie blokad X).

    Serwery bazodanowe automatycznie wykrywaj zakleszczenia i przerywaj dziaaniejednego procesu. Na ofiar zakleszczenia wybierany jest proces o niszym priorytecie,a jeeli oba procesy maj ten sam priorytet, ofiar zakleszczenia zostaje ten, ktregowycofanie jest mniej kosztowne.

    Mechanizm wykrywania i usuwania zakleszcze pokazuje poniszy przykad:

    Pierwszy uytkownik w ramach jawnie rozpocztej transakcji modyfikuje kilka danychw tabeli dbo.Dostawcy:

    BEGIN TRAN;UPDATE dbo.DostawcySET Firma = UPPER(Firma)WHERE ID

  • Rozdzia 9. Transakcje i wspbieno 209

    W dalszej kolejnoci pierwszy uytkownik prbuje odczyta zawarto tabeli zablo-kowanej ju przez drug sesj (okno wynikw moe pokaza kilka wierszy, ale i takuytkownik bdzie musia czeka na moliwo zablokowania w trybie S pozostaychwierszy tabeli Transakcje magazynowe):

    SELECT *FROM dbo.[Transakcje magazynowe];

    W tym momencie nie wystpio jeszcze zakleszczenie wystarczyoby, eby drugiuytkownik zakoczy swoj transakcj. Ale jeeli w ramach drugiej sesji uytkowniksprbuje odczyta zawarto tabeli zmodyfikowanej przez pierwszego uytkownika, obaprocesy si zakleszcz:

    SELECT ID, Firma, [Tytu zawodowy]FROM dbo.Dostawcy;------------------------------------------------------------1 Dostawca A Kierownik ds. sprzeday2 Dostawca B Kierownik ds. sprzeday3 Dostawca C Przedstawiciel handlowy4 Dostawca D Kierownik ds. marketingu5 Dostawca E Kierownik ds. sprzeday

    Po chwili drugie zapytanie zostao jednak wykonane, co wicej nazwy firm nie zostayprzekonwertowane na wielkie litery. eby przekona si, dlaczego tak si stao, wystarczyprzeczy si do okienka pierwszej sesji. Znajdziemy w nim poniszy komunikat bdu:

    Transaction (Process ID 52) was deadlocked on lock resources with another processand has been chosen as the deadlock victim. Rerun the transaction.

    Jeeli sprawdzimy liczb otwartych w ramach pierwszej sesji transakcji, okae si, ejawnie rozpoczta przez pierwszego uytkownika transakcja zostaa zgodnie z komu-nikatem bdu wycofana:

    SELECT @@TRANCOUNT;------------------------------------------------------------0

    Poniewa wycofanie transakcji wie si ze zdjciem zaoonych na jej potrzeby blokad,druga sesja moga z powodzeniem zakoczy operacje i odczyta tabel dbo.Dostawcy.Liczba transakcji otwartych w ramach drugiej sesji nadal wynosi 1 eby zakoczywiczenie i wycofa zmiany, naley wykona w tym oknie edytora SQL instrukcjROLLBACK TRAN.

    Poziomy izolowania transakcjiMoemy wpywa na sposb zakadania blokad przez serwery bazodanowe, zmienia-jc poziom izolowania transakcji. Wikszo serwerw pozwala ustawi (na poziomieserwera, bazy danych lub poszczeglnych sesji) jeden z czterech poziomw izolowa-nia transakcji, przedstawionych przez nas od najmniej restrykcyjnego, w ktrym mak-symalna wspbieno jest okupiona wystpowaniem najwikszej liczby typw niespj-noci danych, do najbardziej restrykcyjnego, ktry kosztem ograniczenia wspbienocigwarantuje najwyszy poziom spjnoci danych.

  • 210 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    Read Uncommitted

    W trybie niezatwierdzonego odczytu (ang. Read Uncommitted) odczyt danych niepowoduje zaoenia blokady wspdzielonej. Na tym poziomie wystpuj brudneodczyty, niepowtarzalne odczyty i odczyty widma (jedynym niekorzystnym zjawi-skiem niewystpujcym na tym poziomie jest utrata aktualizacji).

    eby si o tym przekona:

    1. W jednej sesji (oknie edytora SQL) rozpoczniemy transakcj i zaktualizujemyadres klienta:

    BEGIN TRAN;UPDATE dbo.KlienciSET Adres = 'ZmianaWToku'WHERE ID=1;------------------------------------------------------------ (1 row(s) affected)

    2. W drugiej sesji zmienimy poziom izolowania transakcji na Read Uncommittedi sprbujemy odczyta modyfikowane przez innego uytkownika dane:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;GOSELECT AdresFROM dbo.KlienciWHERE ID=1;------------------------------------------------------------ZmianaWToku

    Udao nam si odczyta dane, pomimo e osoba, ktra je zmieniaa, nie zatwierdziajeszcze transakcji, a wic w kadej chwili moe j wycofa. W tym trybie (czstowymuszanym na poziomie poszczeglnych instrukcji za pomoc specyficznych dladanego serwera bazodanowego dyrektyw optymalizatora) mona odczytywa dane,o ktrych wiemy, e nie bd w tym samym czasie modyfikowane.

    Koczc wiczenie, zamknij bez zatwierdzania otwartej transakcji i na nowo otwrz obaokna edytora SQL w ten sposb kolejne wiczenie rozpoczniemy, pracujc w domyl-nym trybie izolowania transakcji.

    Read Committed

    Tryb odczytu zatwierdzonego (ang. Read Committed) jest domylnym poziomemizolowania transakcji. Na tym poziomie odczyt danych wymaga zaoenia na nichblokady wspdzielonej. Poniewa zakadana na czas zmiany blokada X jest niekom-patybilna z innymi blokadami, w tym z blokad S, eliminuje to brudne odczyty. Jednakna tym poziomie nadal wystpuj niepowtarzalne odczyty i odczyty widma.

    Zjawisko niepowtarzalnego odczytu pokazuje poniszy przykad:

    1. W pierwszym oknie edytora SQL ustawiamy tryb odczytw zatwierdzonych8,jawnie rozpoczynamy transakcj i odczytujemy adres wybranego klienta:

    8 Poniewa ten tryb jest trybem domylnym, instrukcja SET jest dodana tylko w celach demonstracyjnych.

  • Rozdzia 9. Transakcje i wspbieno 211

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRAN;SELECT AdresFROM dbo.KlienciWHERE ID=1;------------------------------------------------------------ul. Jasna 123

    2. W tym momencie transakcja jest nadal otwarta, a my w drugim oknie edytoraSQL zmienimy adres tego klienta:

    UPDATE dbo.KlienciSET Adres = 'OdczytWToku'WHERE ID=1;------------------------------------------------------------ (1 row(s) affected)

    3. Jeeli pierwszy uytkownik w ramach tej samej transakcji ponownie odczytaadres tego klienta, uzyska inny wynik:

    SELECT AdresFROM dbo.KlienciWHERE ID=1;COMMIT TRAN;------------------------------------------------------------OdczytWToku

    Repeatable Read

    W trybie powtarzalnego odczytu (ang. Repeatable Read) blokady wspdzielone typuS s utrzymywane do czasu zakoczenia caej transakcji. Dziki temu inny proces niemoe zmodyfikowa odczytywanych w jej ramach danych, co eliminuje niepowtarzalneodczyty. Z niekorzystnych zjawisk zwizanych z izolowaniem transakcji na tym pozio-mie wystpuj tylko odczyty widma.

    Zjawisko odczytu widma pokazuje poniszy przykad:

    1. W ramach pierwszej sesji zmienimy poziom izolowania transakcji na RepeatableRead i w ramach jawnie rozpocztej transakcji odczytamy nazwy towarwo kodach koczcych si cyfr 6:

    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;BEGIN TRAN;SELECT [Nazwa produktu]FROM dbo.ProduktyWHERE [Kod produktu] LIKE '%6';------------------------------------------------------------Northwind Traders Boysenberry SpreadNorthwind Traders MarmaladeNorthwind Traders GnocchiNorthwind Traders Tomato SauceNorthwind Traders Cake MixNorthwind Traders Smoked Salmon

    2. Podczas gdy pierwsza transakcja jest wci otwarta, w drugim oknie edytora SQLzmienimy kod jednego z pozostaych, niezwrconych przez pierwsze zapytanieproduktu na NWTCO-6, a wic na kod speniajcy warunki pierwszego zapytania:

  • 212 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    UPDATE dbo.ProduktySET [Kod produktu] = 'NWTCO-6'WHERE [Kod produktu] ='NWTCO-3';------------------------------------------------------------ (1 row(s) affected)

    3. Jeeli pierwszy uytkownik raz jeszcze wykona, w ramach tej samej transakcji,to samo zapytanie, tym razem jego wynik bdzie liczy wicej wierszy pojawisi w nim wiersz widmo:

    SELECT [Nazwa produktu]FROM dbo.ProduktyWHERE [Kod produktu] LIKE '%6';------------------------------------------------------------Northwind Traders SyrupNorthwind Traders Boysenberry SpreadNorthwind Traders MarmaladeNorthwind Traders GnocchiNorthwind Traders Tomato SauceNorthwind Traders Cake MixNorthwind Traders Smoked Salmon

    4. Jeli jednak w ramach drugiej sesji sprbujemy zmieni dane odczytywanew ramach nadal otwartej pierwszej transakcji (czyli doprowadzi doniepowtarzalnego odczytu), instrukcja bdzie oczekiwa, a pierwsza transakcjazostanie zakoczona, a zaoone dla niej blokady zdjte:

    UPDATE dbo.ProduktySET [Kod produktu] = 'NWTCO-1'WHERE [Kod produktu] ='NWTJP-6';

    5. eby powysza aktualizacja zostaa wykonana, w pierwszym oknie edytora SQLwykonaj instrukcj COMMIT TRAN.

    W trybie Repeatable Read naley odczytywa te dane, ktre w ramach transakcjis odczytywane kilkukrotnie i mog by zmieniane w tym samym czasie przezinnych uytkownikw. Sytuacja taka ma miejsce np. w rnego rodzaju zestawieniachi raportach zbiorczych, w ktrych odczytujc te same dane, za kadym razem musimyotrzyma te same wyniki, inaczej zestawienie lub raport bd niespjne.

    Serializable

    W trybie szeregowania transakcje odwoujce si do tych samych tabel s wykonywanejedna po drugiej. Blokowanie caych obiektw, a nie tylko odczytywanych danych, naczas trwania transakcji pozwala wyeliminowa odczyty widma, ale powoduje, e odczy-tujc nawet jeden wiersz tabeli, moemy uniemoliwi pozostaym uytkownikomzmodyfikowanie przechowywanych w niej danych.

    eby si o tym przekona:

    1. W pierwszym oknie edytora SQL przeczymy si do trybu szeregowania,jawnie rozpoczniemy transakcj i odczytamy informacje o wybranym towarze:

    SELECT [Nazwa produktu]FROM dbo.Produkty

  • Rozdzia 9. Transakcje i wspbieno 213

    WHERE [Kod produktu] LIKE '%6';------------------------------------------------------------Northwind Traders SyrupNorthwind Traders GnocchiNorthwind Traders Tomato SauceNorthwind Traders Cake MixNorthwind Traders Smoked Salmon

    2. Jeeli teraz w drugim oknie edytora SQL sprbujemy zmieni dane dowolnego,rwnie niezwrconego przez pierwsze zapytanie produktu, okae si, eaktualizacja zostaa zablokowana i bdzie wykonana dopiero po zakoczeniupierwszej transakcji:

    UPDATE dbo.ProduktySET [Kod produktu] = 'NWTCA-48'WHERE [Kod produktu] ='NWTCA-49';

    3. Koczc wiczenie, zamknij oba okna edytora SQL bez zatwierdzaniarozpocztej w jednym z nich transakcji.

    W trybie Serializable mamy gwarancj, e odczytywane w ramach transakcji danezawsze bd takie same serwer bazodanowy nie dopuci nie tylko do ich zmiany, lecztake do pojawienia si nowych danych. Jednak przez ten czas pozostali uytkownicy niebd mogli modyfikowa zablokowanych tabel. W wikszoci przypadkw powodujeto tak znaczne wyduenie czasu reakcji serwera, e lepiej jest skopiowa odczytywanedane9, a jeeli zmian nie jest zbyt duo, przeczy si do modelu optymistycznego.

    Model optymistyczny

    W modelu optymistycznym tylko modyfikujcy blokuj innych modyfikujcych,czyli rni uytkownicy mog jednoczenie modyfikowa i odczytywa te same dane.

    Serwery bazodanowe zapewniaj spjno modyfikowanych w tym modelu danychpoprzez ich wersjonowanie. Zakadajc (optymistycznie), e w czasie gdy jeden uyt-kownik odczytuje dane, inni raczej nie bd ich modyfikowa, serwery te s w stanie nabieco zarzdza dodatkowymi wersjami danych.

    Jeeli to zaoenie jest prawdziwe, czyli jeeli jednoczesne modyfikacje i odczytytych samych danych nie zachodz zbyt czsto, moemy znacznie skrci czas reakcjiserwera10, przeczajc baz do optymistycznego modelu wspbienoci. eby sio tym przekona:

    1. W pierwszym oknie edytora SQL wykonamy ponisze instrukcje, przeczajcbaz Northwind do modelu optymistycznego:

    USE master;ALTER DATABASE NorthwindSET READ_COMMITTED_SNAPSHOT ON

    9 Niektre serwery bazodanowe pozwalaj utworzy migawk (ang. Snapshot) danych.10 Niektre serwery bazodanowe, np. serwer Oracle, domylnie dziaaj w optymistycznym modelu

    wspbienoci.

  • 214 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE, MERGE

    WITH ROLLBACK IMMEDIATE;------------------------------------------------------------Command(s) completed successfully.

    2. W tym samym oknie edytora SQL poczymy si z baz Northwind i w ramachjawnie rozpocztej transakcji zmienimy dane dwch pracownikw:

    USE Northwind;BEGIN TRAN;UPDATE dbo.PracownicySET Nazwisko = 'X'WHERE ID

  • Rozdzia 9. Transakcje i wspbieno 215

    Podsumowanie Serwery bazodanowe przeprowadzaj wszystkie zmiany danych w ramach

    jawnie lub niejawnie rozpocztych transakcji.

    Transakcje powinny by otwierane jak najpniej i zamykane jak najwczeniej.

    Transakcje powinny zawiera tylko powizane ze sob instrukcje.

    Przerwane (czy to z powodu awarii klienta, czy te serwera) transakcje bdwycofane.

    Na czas trwania transakcji pewne obiekty bazy danych s automatycznieblokowane.

    Serwery bazodanowe automatycznie wykrywaj zakleszczenia i usuwaj jepoprzez wycofanie jednej z zakleszczonych transakcji.

    Odizolowanie, jedn z czterech cech ACID transakcji, uzyskuje si za pomocautomatycznie zakadanych i zwalnianych blokad.

    Mona sterowa sposobem zakadania i czasem trwania blokad, zmieniajcpoziom izolowania transakcji.

    W modelu optymistycznym serwery bazodanowe wersjonuj dane, co poprawiawspbieno kosztem wikszego obcienia serwera.

    Zadania 1. Twoim zadaniem jest przygotowanie raportu podsumowujcego roczn sprzeda.Wyliczajc sumy i rednie wartoci sprzeday produktw, kilkukrotnie musiszodczyta tabel dbo.Produkty. Jak zagwarantujesz poprawno wynikw raportu?

    2. Po przerwie na lunch uytkownicy zgaszaj, e prby dalszej pracy z bazdanych kocz si chwilowym zawieszeniem programu i wreszcie komunikatembdu mwicym, i serwer bazodanowy jest niedostpny. Po sprawdzeniuokazuje si, e serwer i sie dziaaj normalnie, a baza nie zostaa uszkodzona.Co jest najbardziej prawdopodobn przyczyn problemu?

    3. W ramach tworzonej procedury modyfikujesz due iloci danych zapisanychw kilkunastu tabelach oraz wstawiasz jeden wiersz, informujcy o wykonaniuwszystkich operacji, do tabeli znajdujcej si w bazie danych na zdalnymserwerze. Poczenie midzy serwerami jest mocno obcione i zdarza si,e czas nawizywania sesji i przesyania danych pomidzy serwerami wielokrotniesi wydua. Co zrobi, aby w przypadku zgoszenia przez procedur bdubraku poczenia ze zdalnym serwerem nie trzeba byo ponownie wykonywadugotrwaych modyfikacji danych?

  • Skorowidz

    Aaccess, 10ACID, 201aktualizacja

    automatyczna wartoci kluczy, 230danych, 191danych wybranych na podstawie danych z

    innych tabel, 193danych za pomoc wyrae odwoujcych si

    do innych tabel, 194utrata, 200wielu kolumn jednoczenie, 192

    alias, 59, 93apostrof, 74argument

    SARG, 85, 132

    Bbaza danych, 9, 22, 219

    Northwind, 89, 100, 124relacyjna, 19, 26

    blokada, 207tryb, 207wspdzielona, 207wyczna X, 207zakres, 207

    CCodd Edgar Frank, 29Connection Statements, 41Control Statements, 41CTE

    proste, 160, 162rekurencyjne, 162

    czcionka o staej szerokoci, 15

    Ddane

    aktualizacja, 191aktualizacja na podstawie danych

    z innych tabel, 193aktualizacja za pomoc wyrae

    odwoujcych si do innych tabel, 194grupowanie

    wydajne, 132przetwarzanie pojedycze, 34tekstowe

    generowanie, 99czenie, 55sortowanie, 63

    typ, 20, 42usuwanie, 189wstawianie, 183

    Data Statements, 41DB2, 10Diagnostics Statements, 41dialekt

    jzyka SQL, 39dokument XML, 42

    XML, 42duplikat, 52

    eliminacja, 105dyrektywa GO, 85

    Ffunkcja

    arytmetycznaABS, 56CEILING, 56FLOOR, 56POWER, 56

  • 298 Praktyczny kurs SQL

    funkcjaarytmetyczna

    RAND, 56ROUND, 56SQRT, 56

    CASE, 58CAST, 57czas

    DATEADD, 57data

    DATEADD, 57DAY, 57GETDATE, 57MONTH, 57YEAR, 57

    GROUPING, 128GROUPING_ID, 128grupujca

    AVG, 119CHECKSUM_AGG, 121COUNT, 118COUNT_BIG, 121MAX, 120MIN, 120STDEV, 121STDEVP, 121SUM, 119VAR, 121VARP, 121zagniedanie, 122

    rankingu, 136systemowa, 55tabelaryczna

    czenie, 112znakowa

    LEN, 56LOWER, 56LTRIM, 56REPLACE, 56REPLICATE, 56RTRIM, 56SUBSTRING, 56UPPER, 56

    Iidentyfikator, 24, 37, 50

    spedytora, 146iloczyn kartezjaski, 98indeks, 22, 81, 87, 235, 243

    modyfikowanie, 245odtworzenie, 247opcje, 247

    tworzenie, 245uporzdkowanie kluczy, 248usunicie, 247usuwanie, 245

    instrukcjaALTER, 223ALTER DATABASE, 221ALTER VIEW, 238CALL, 11COMMIT TRAN, 205CREATE ROLE, 255CREATE SCHEMA, 223CREATE TABLE, 222CREATE USER, 254CREATE VIEW, 235CREATE., 219DCL, 40DDL, 40DELETE, 189, 191DENY, 257, 258DML, 40DROP, 221, 232DROP ROLE:, 255DROP TABLE, 222EXEC, 11IF THEN ELSE, 58INSERT INTO SELECT, 188klasa, 41MERGE, 194modyfikujca, 231REVOKE, 257, 258SELECT, 54, 236SELECT INTO, 187TRUNCATE TABLE, 189, 191UPDATE, 191, 192

    InterBase, 10InterBase Firebird, 10

    Jjzyk

    deklaratywny, 35interpretowany, 35kompilowany, 35proceduralny, 35SEQUEL, 33

    Kkaskadowe usuwanie, 230katalog, 22klasa instrukcji, 41klaster, 22

  • Skorowidz 299

    klauzulaCHECK OPTION, 242FROM, 49, 50, 59, 80GROUP BY, 122, 124, 129HAVING, 141ON DELETE, 230ON UPDATE, 230ORDER BY, 62, 236ORDER BY,, 80OVER, 132SELECT, 59, 80SET, 193TOP, 78, 79, 80WHEN, 58WHERE, 70, 80, 91

    kluczindeksu, 81obcy, 24, 90, 106, 228podstawowy, 21, 24, 90, 184, 225

    kompozytowe, 226kolumna, 21, 24, 51

    aktualizacja wielu kolumn jednoczenie, 192komentarz, 37, 39kompilator, 35konsola SSMSE, 14konstruktor

    wiersz, 187konto uytkownika, 253

    usuwanie, 254zakadanie, 254

    konwencja, 15kursywa, 15

    Llista wartoci, 149litera, 37, 38, 60logika trjwartociowa, 67

    czenie

    danych tekstowych, 55

    Mmodel

    jednorodny, 23obiektowy, 26optymistyczny, 213pesymistyczny, 214relacyjna baza danych, 19relacyjny, 24

    MySQL, 10

    Nniepowtarzalno, 227niezgodno

    skadni, 26typw, 26uycia, 27

    normalizacja, 29NOT NULL, 224

    Oobiekt, 20, 37odczyt

    brudny, 200niepowtarzalny, 200niezatwierdzony, 210powtarzalny, 211widma, 200zatwierdzony, 210

    ograniczenia, 224, 231operator, 37, 38

    ALL, 170, 177AND, 68, 69, 75ANY, 173, 175ANY lub SOME, 169APPLY, 113arytmetyczny, 38, 54BETWEEN ... AND, 73CROSS APPLY, 114CUBE, 126cz wsplna, 111EXCEPT, 111EXISTS, 169, 170, 171GROUPING SETS, 129, 131IN, 72, 150, 153INTERSECT, 111IS NULL, 74JOIN ON, 91Key Lookup, 82, 85konkatenacji, 55LIKE, 74logiczny, 38, 68NATURAL JOIN, 92NOT, 68, 69, 85OR, 68, 69, 75PIVOT, 137porwnania, 38, 71

    mniejszy lub rwny, 71mniejszy ni, 71rwny, 71rny, 71wikszy lub rwny, 71wikszy ni, 71

  • 300 Praktyczny kurs SQL

    operatorROLLUP, 126rnica, 111SOME, 173SQL, 72suma, 108UNION, 109UNION ALL, 109UNPIVOT, 137, 140znakowy, 38

    optymalizacja, 36Oracle Database, 10ORM, 27

    Ppartycja, 134PL/pgSQL, 39PL/SQL, 39podzapytanie, 145, 146, 147, 156

    jako rda danych, 156niepowizane, 146niezwracajce adnych wartoci, 150powizane, 151usuwanie wynikw, 190zagniedanie, 151zwracajce list wartoci, 149

    pogrubienie, 15posta

    normalnadruga, 30pierwsza, 29trzecia, 30

    sterty, 243uporzdkowana struktura, 243

    PostgreSQL, 10postulat

    dostpu, 28fizycznej niezalenoci danych, 28informacyjny, 28logicznej niezalenoci danych, 28modyfikowania bazy danych przez widoki, 28modyfikowania danych na wysokim poziomie

    abstrakcji, 29niezalenoci dystrybucyjnej, 28niezalenoci ogranicze, 29penego jzyka danych, 28postulat Codda

    dotyczce integralnoci danych, 29dotyczce przetwarzania danych, 28dotyczce struktury danych, 27

    sownika danych, 29wartoci, 29

    zabezpieczenia przed modyfikacjamiprzeprowadzanymi za pomoc jzykwproceduralnych, 28

    poziomizolowania transakcji, 209zgodnoci, 43

    peny, 40podstawowy, 40poredni, 40

    przetwarzaniepojedynczych danych, 34zbioru, 34

    punkt przywracania, 206

    RRead Committed, 210Read Uncommitted, 210rekord, 20

    selekcja, 70relacja, 24Repeatable Read, 211rola, 255

    przypisanie rl do uytkownikw, 255public, 256tworzenie, 255usuwanie, 255

    SSchema Statements, 42schemat, 22, 223serwer

    bazodanowy, 9, 10, 22, 35, 50, 81, 82, 84,132, 145, 153, 184, 201, 203, 206, 208, 223,245, 256

    SQL 2011, 92, 137, 253, 257Session Statements, 42sowo kluczowe, 37, 38

    DESC, 61DISTINCT, 53, 118

    SQLdialekt jzyka, 39SQL PL, 40SQL Server, 10SQL Server 2011, 10

    standardANSI, 40ANSI SQL, 11ANSI SQL3, 11ANSI SQL99, 9, 22SQL3, 41, 44, 111, 122, 260SQL99, 39

  • Skorowidz 301

    stronicowanie, 80wierszy, 79

    symbol, 15, 52, 83naduywanie, 184

    Ttabela, 81, 95, 219

    czenie, 89cznikowa, 30pochodna, 157sownikowa, 30tworzenie, 222usuwanie, 222

    Transaction Statements, 42transact-SQL, 11transakcja, 199, 200, 203

    cechy, 201izolowana, 200niepodzielna, 200poziom izolowania, 209przetwarzanie danych, 201, 204spjna, 200trwaa, 201tryb jawnego zatwierdzenia, 202tryb niejawnego zatwierdzenia, 201waciwoci, 199wycofanie, 204zagniedanie, 205zatwierdzanie, 205

    trendwyznaczanie, 165

    trybjawnego zatwierdzania transakcji, 202niejawnego zatwierdzania transakcji., 201odczytu niezatwierdzonego, 210odczytu zatwierdzonego, 210powtarzalnego odczytu, 211Repeatable Read, 212serializable, 212szeregowania, 212

    T-SQL, 39typ

    binarny, 42BINARY, 42BLOB, 42VARBINARY, 42

    czas, 42TIME, 42

    danych, 20, 42data, 42

    DATE, 42konwersja, 57liczba, 42

    INTEGER, 42NUMERIC, 42REAL, 42SMALLINT, 42

    znak, 42CHAR, 42NCHAR, 42NVARCHAR, 42VARCHAR, 42

    Uuprawnienie

    DELETE, 257do modyfikowania kont uytkownikw, 256do modyfikowania rl, 256do odczytywania metadanych obiektw, 256do przejmowania obiektw na wasno, 256do tworzenia funkcji, 256do tworzenia procedur, 256do tworzenia schematw, 256do tworzenia tabel, 256do wykonywania kopii zapasowych baz

    danych, 256dziedziczenie, 258EXECUTE, 257INSERT, 257nadawanie, 253, 257obiektowe, 257odbieranie, 253, 257odbieranie uprawnie w serwerze SQL 2011, 257przekazywanie, 260REFERENCE, 257SELECT, 257systemowe, 256UPDATE, 257

    Wwarto

    CASCADE, 230domylna, 185, 227FALS, 69nieznana, 42, 150NO ACTION, 230NULL, 42, 68, 186odczytanie, 146przypisanie, 146SET DEFAULT, 230SET NULL, 230TRUE, 69UNKNOWN, 68, 69

  • 302 Praktyczny kurs SQL

    waruneklogiczny, 228

    zoony, 75zczenia, 96

    widok, 235, 243grupujcy dane, 240modyfikowanie, 238modyfikowanie danych, 240tworzenie, 235usuwanie, 235zagniedony, 239

    wiersz, 20grupowanie, 117czenie, 112stronicowanie, 79wybr, 67zliczanie, 118

    wskanik, 81wspbieno, 199, 207wynik

    formatowanie, 58sortowanie, 60

    wyraenie, 54, 121, 193tabelaryczne, 159

    Zzakleszczenie, 208

    cykliczne, 208konwersji, 208

    zapytanieczenie wynikw, 107wewntrzne, 146wstawianie wynikw, 187zagniedone, 145

    zasadaminimalnych uprawnie, 261sprzecznoci, 67tosamoci, 67wyczonego rodka, 67

    zbirprzetwarzanie, 34rekordw, 20

    zczenie, 155FULL OUTER JOIN, 98krzyowe, 98LEFT OUTER JOIN, 97lewostronne, 97naturalne, 89, 92nienaturalne, 89, 92nierwnociowe, 94, 95obustronne, 98okrelenie kolejnoci, 103prawostronne, 97RIGHT OUTER JOIN, 97rwnociowe, 94tabeli z ni sam, 104wielokrotne, 100zewntrzne, 96

    zmienna, 148

  • Spis treciWstp .............................................................................................. 9

    Cz I Troch teorii, czyli modele i standardy .......................... 17

    Rozdzia 1. Relacyjny model baz danych ........................................................... 19Tabele jako zbiory danych .............................................................................................. 19

    Kolumny maj niepowtarzalne nazwy i zawieraj okrelone typy danych ............... 20Wiersze powinny by unikalne ................................................................................ 21Kolejno kolumn jest bez znaczenia ....................................................................... 21Kolejno wierszy jest bez znaczenia ....................................................................... 22

    Bazy danych ................................................................................................................... 22Trzy modele baz danych: relacyjny, obiektowy i jednorodny ........................................ 23

    Model jednorodny .................................................................................................... 23Model relacyjny ....................................................................................................... 24Model obiektowy ..................................................................................................... 26

    Zaoenia relacyjnego modelu baz danych ..................................................................... 27Postulaty Codda dotyczce struktury danych ........................................................... 27Postulaty Codda dotyczce przetwarzania danych ................................................... 28Postulaty Codda dotyczce integralnoci danych ..................................................... 29Normalizacja ............................................................................................................ 29

    Podsumowanie ................................................................................................................ 31Zadania ........................................................................................................................... 31

    Rozdzia 2. Standardy jzyka SQL ..................................................................... 33Strukturalny jzyk zapyta ............................................................................................. 33

    Przetwarzanie zbiorw a przetwarzanie pojedynczych danych ................................ 34Jzyk deklaratywny a jzyk proceduralny ................................................................ 35Jzyk interpretowany a jzyk kompilowany ............................................................. 35Skadnia jzyka SQL ................................................................................................ 37Dialekty jzyka SQL ................................................................................................ 39

    Standardy ANSI .............................................................................................................. 40Historia ..................................................................................................................... 40SQL3 ........................................................................................................................ 41

    Podsumowanie ................................................................................................................ 44Zadania ........................................................................................................................... 44

  • 4 Praktyczny kurs SQL

    Cz II Pobieranie danych, czyli instrukcja SELECT ................... 47

    Rozdzia 3. Odczytywanie danych z wybranej tabeli ........................................... 49Klauzula FROM ............................................................................................................. 49

    W peni kwalifikowane nazwy obiektw ................................................................. 50Wybieranie kolumn ........................................................................................................ 51Eliminowanie duplikatw ............................................................................................... 52Wyraenia ....................................................................................................................... 54

    Operatory arytmetyczne ........................................................................................... 54czenie danych tekstowych .................................................................................... 55Funkcje systemowe .................................................................................................. 55

    Formatowanie wynikw ................................................................................................. 58Aliasy ....................................................................................................................... 59Stae (literay) ........................................................................................................... 60

    Sortowanie wynikw ...................................................................................................... 60Sortowanie danych tekstowych ................................................................................ 63

    Podsumowanie ................................................................................................................ 65Zadania ........................................................................................................................... 65

    Rozdzia 4. Wybieranie wierszy ......................................................................... 67Logika trjwartociowa .................................................................................................. 67

    Warto NULL ......................................................................................................... 68Operatory logiczne ................................................................................................... 68

    Klauzula WHERE .......................................................................................................... 70Standardowe operatory porwnania ......................................................................... 71Operatory SQL ......................................................................................................... 72Zoone warunki logiczne ........................................................................................ 75

    Klauzula TOP ................................................................................................................. 78Stronicowanie wierszy .................................................................................................... 79Wydajne wyszukiwanie danych ...................................................................................... 80

    W jaki sposb serwery bazodanowe odczytuj dane? .............................................. 81W jakiej kolejnoci serwery bazodanowe wykonuj poszczeglne

    klauzule zapyta? .................................................................................................. 84Argumenty SARG .................................................................................................... 85

    Podsumowanie ................................................................................................................ 87Zadania ........................................................................................................................... 87

    Rozdzia 5. czenie tabel i wynikw zapyta ................................................... 89Zczenia naturalne i nienaturalne .................................................................................. 89

    Klucze obce .............................................................................................................. 90Aliasy ....................................................................................................................... 93

    Zczenia rwnociowe i nierwnociowe ..................................................................... 94Zczenia zewntrzne ..................................................................................................... 96

    Zczenie lewostronne .............................................................................................. 97Zczenie prawostronne ............................................................................................ 97Zczenie obustronne ................................................................................................ 98

    Zczenie krzyowe (iloczyn kartezjaski) ..................................................................... 98Zczenia wielokrotne ................................................................................................... 100

    Okrelanie kolejnoci zcze ................................................................................ 103Zczenie tabeli z ni sam ........................................................................................... 104

    Eliminacja duplikatw ............................................................................................ 105Klucze obce w obrbie jednej tabeli ....................................................................... 106

  • Spis treci 5

    czenie wynikw zapyta ........................................................................................... 107Suma ....................................................................................................................... 108Cz wsplna ........................................................................................................ 111Rnica ................................................................................................................... 111

    czenie wierszy i wynikw funkcji tabelarycznych ................................................... 112Operator APPLY .................................................................................................... 113

    Podsumowanie .............................................................................................................. 115Zadania ......................................................................................................................... 115

    Rozdzia 6. Grupowanie wierszy ...................................................................... 117Funkcje grupujce ........................................................................................................ 117

    Funkcja COUNT() .................................................................................................. 118Funkcje SUM() i AVG() ........................................................................................ 119Funkcje MIN() i MAX() ......................................................................................... 120Inne funkcje grupujce ........................................................................................... 120Wyraenia .............................................................................................................. 121

    Klauzula GROUP BY ................................................................................................... 122Kolejno wykonywania klauzuli GROUP BY ...................................................... 125Operatory CUBE i ROLLUP .................................................................................. 126Operator GROUPING SETS .................................................................................. 129

    Wydajne grupowanie danych ....................................................................................... 132Niestandardowa klauzula OVER .................................................................................. 132

    Partycje ................................................................................................................... 134Funkcje rankingu .................................................................................................... 136

    Niestandardowe operatory PIVOT i UNPIVOT ........................................................... 137PIVOT .................................................................................................................... 137UNPIVOT .............................................................................................................. 140

    Klauzula HAVING ....................................................................................................... 141Podsumowanie .............................................................................................................. 143Zadania ......................................................................................................................... 144

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 144

    Rozdzia 7. Podzapytania ............................................................................... 145Czym s podzapytania? ................................................................................................ 145Podzapytania jako zmienne .......................................................................................... 146

    Podzapytania niepowizane .................................................................................... 146Podzapytania powizane ........................................................................................ 151

    Podzapytania jako rda danych ................................................................................. 156Tabele pochodne .................................................................................................... 157CTE ........................................................................................................................ 159Wyznaczanie trendw ............................................................................................ 165

    Operatory ...................................................................................................................... 169Operator EXISTS ................................................................................................... 170Operator ANY lub SOME ...................................................................................... 173Operator ALL ......................................................................................................... 177

    Podsumowanie .............................................................................................................. 178Zadania ......................................................................................................................... 179

    Zadanie dodatkowe, do wykonania w bazie AdventureWorks ............................... 179

  • 6 Praktyczny kurs SQL

    Cz III Modyfikowanie danych, czyli instrukcje INSERT,UPDATE, DELETE oraz MERGE .................................... 181

    Rozdzia 8. Modyfikowanie danych ................................................................. 183Wstawianie danych ....................................................................................................... 183

    Klucze podstawowe ................................................................................................ 184Wartoci domylne ................................................................................................. 185Warto NULL ....................................................................................................... 186Konstruktor wi