Download - Praktyczny Kurs SQL. Wydanie II eBook
-
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