32

Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi
Page 2: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Idź do

• Spis treści• Przykładowy rozdział• Skorowidz

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacjeo nowościach

• Fragmenty książekonline

Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2011

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowanykatalog

Praktyczny kurs SQL.Wydanie II

Autor: Danuta Mendrala, Marcin Szeliga

ISBN: 978-83-246-3373-9

Format: 158×235, stron: 304

Poznaj modele baz danych i standardy języka SQL• Naucz się korzystać z instrukcji pobierania i modyfikacji danych

• Dowiedz się, jak tworzyć i zmieniać strukturę bazy oraz zarządzać jej użytkownikami

Opanuj język SQL w praktyce!Bazy danych są dosłownie wszędzie. Trudno sobie dziś bez nich wyobrazić funkcjonowanie

nowoczesnej biblioteki, choćby najmniejszego sklepu internetowego, biura rachunkowego czy

nawet niewielkiego serwisu WWW. Użytkownicy korzystający z baz danych często nie mają nawet

pojęcia, w jaki sposób odbywa się dostęp do informacji i jaki mechanizm jest za to odpowiedzialny.

Na ignorancję tę nie mogą sobie jednak pozwolić osoby odpowiedzialne za tworzenie, zarządzanie

i konserwowanie baz danych. Powinny one znać przynajmniej jeden z popularnych serwerów

bazodanowych i sprawnie posługiwać się językiem SQL stanowiącym standardowe narzędzie

komunikacji z relacyjnymi bazami.

Jeśli pragniesz dołączyć do ekskluzywnego grona administratorów baz danych lub chcesz zostać

programistą aplikacji bazodanowych, lecz przeszkadza Ci brak znajomości SQL-a, sięgnij po książkę

„Praktyczny kurs SQL. Wydanie II”. W prosty i przystępny sposób prezentuje ona podstawowe

pojęcia i zasady rządzące relacyjnym modelem baz danych, a także najważniejsze cechy

i konstrukcje języka SQL oraz metody ich wykorzystywania. Lektura książki umożliwi Ci poznanie

instrukcji odpowiedzialnych za odczytywanie danych z bazy i ich zapisywanie oraz modyfikację,

jak również tworzenie baz i zmianę ich struktury. Poznasz też sposoby tworzenia ról i kont

użytkowników oraz zarządzania ich uprawnieniami. Twoją wiedzę ugruntują praktyczne zadania

kończące każdy rozdział, a zamieszczone na końcu książki rozwiązania pomogą skorygować

ewentualne błędy.

• Teoretyczne podstawy funkcjonowania baz danych

• Historia języka SQL i obowiązujące standardy zapytań

• Odczytywanie, przeszukiwanie, łączenie i grupowanie danych

• Korzystanie z podzapytań

• Zapisywanie, modyfikacja i usuwanie danych

• Transakcje i równoległy dostęp do danych

• Tworzenie baz danych i modyfikacja ich struktury

• Korzystanie z widoków i indeksów

• Zarządzanie użytkownikami, rolami i prawami dostępu do baz danych

Dowiedz się, jak tworzyć relacyjną bazę danych i zarządzać nią za pomocą języka SQL

Page 3: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Spis tre�ciWst�p .............................................................................................. 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� okre�lone 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

Za�o�enia relacyjnego modelu baz danych ..................................................................... 27Postulaty Codda dotycz�ce struktury danych ........................................................... 27Postulaty Codda dotycz�ce przetwarzania danych ................................................... 28Postulaty Codda dotycz�ce integralno�ci danych ..................................................... 29Normalizacja ............................................................................................................ 29

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

Rozdzia� 2. Standardy j�zyka SQL ..................................................................... 33Strukturalny j�zyk zapyta� ............................................................................................. 33

Przetwarzanie zbiorów a przetwarzanie pojedynczych danych ................................ 34J�zyk deklaratywny a j�zyk proceduralny ................................................................ 35J�zyk interpretowany a j�zyk kompilowany ............................................................. 35Sk�adnia j�zyka SQL ................................................................................................ 37Dialekty j�zyka SQL ................................................................................................ 39

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

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

Page 4: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

4 Praktyczny kurs SQL

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

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

W pe�ni kwalifikowane nazwy obiektów ................................................................. 50Wybieranie kolumn ........................................................................................................ 51Eliminowanie duplikatów ............................................................................................... 52Wyra�enia ....................................................................................................................... 54

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

Formatowanie wyników ................................................................................................. 58Aliasy ....................................................................................................................... 59Sta�e (litera�y) ........................................................................................................... 60

Sortowanie wyników ...................................................................................................... 60Sortowanie danych tekstowych ................................................................................ 63

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

Rozdzia� 4. Wybieranie wierszy ......................................................................... 67Logika trójwarto�ciowa .................................................................................................. 67

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

Klauzula WHERE .......................................................................................................... 70Standardowe operatory porównania ......................................................................... 71Operatory SQL ......................................................................................................... 72Z�o�one warunki logiczne ........................................................................................ 75

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

W jaki sposób serwery bazodanowe odczytuj� dane? .............................................. 81W jakiej kolejno�ci serwery bazodanowe wykonuj� poszczególne

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

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

Rozdzia� 5. ��czenie tabel i wyników zapyta� ................................................... 89Z��czenia naturalne i nienaturalne .................................................................................. 89

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

Z��czenia równo�ciowe i nierówno�ciowe ..................................................................... 94Z��czenia zewn�trzne ..................................................................................................... 96

Z��czenie lewostronne .............................................................................................. 97Z��czenie prawostronne ............................................................................................ 97Z��czenie obustronne ................................................................................................ 98

Z��czenie krzy�owe (iloczyn kartezja�ski) ..................................................................... 98Z��czenia wielokrotne ................................................................................................... 100

Okre�lanie kolejno�ci z��cze� ................................................................................ 103Z��czenie tabeli z ni� sam� ........................................................................................... 104

Eliminacja duplikatów ............................................................................................ 105Klucze obce w obr�bie jednej tabeli ....................................................................... 106

Page 5: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Spis tre�ci 5

�czenie wyników zapyta� ........................................................................................... 107Suma ....................................................................................................................... 108Cz��� wspólna ........................................................................................................ 111Ró�nica ................................................................................................................... 111

�czenie wierszy i wyników funkcji tabelarycznych ................................................... 112Operator APPLY .................................................................................................... 113

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

Rozdzia� 6. Grupowanie wierszy ...................................................................... 117Funkcje grupuj�ce ........................................................................................................ 117

Funkcja COUNT() .................................................................................................. 118Funkcje SUM() i AVG() ........................................................................................ 119Funkcje MIN() i MAX() ......................................................................................... 120Inne funkcje grupuj�ce ........................................................................................... 120Wyra�enia .............................................................................................................. 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 niepowi�zane .................................................................................... 146Podzapytania powi�zane ........................................................................................ 151

Podzapytania jako ród�a danych ................................................................................. 156Tabele pochodne .................................................................................................... 157CTE ........................................................................................................................ 159Wyznaczanie trendów ............................................................................................ 165

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

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

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

Page 6: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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 ................................................................................................ 184Warto�ci domy�lne ................................................................................................. 185Warto�� NULL ....................................................................................................... 186Konstruktor wierszy ............................................................................................... 187Wstawianie wyników zapyta� ................................................................................ 187

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

Aktualizowanie danych ................................................................................................ 191Jednoczesne aktualizowanie wielu kolumn ............................................................ 192Wyra�enia .............................................................................................................. 193Aktualizowanie danych wybranych na podstawie danych z innych tabel .............. 193Aktualizowanie danych za pomoc� wyra�e� odwo�uj�cych si� do innych tabel .... 194

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

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

Rozdzia� 9. Transakcje i wspó�bieno�� .......................................................... 199W�a�ciwo�ci transakcji ................................................................................................. 199Transakcyjne przetwarzanie danych ............................................................................. 201

Tryb jawnego zatwierdzania transakcji .................................................................. 202Rozpoczynanie transakcji ....................................................................................... 203Wycofywanie transakcji ......................................................................................... 204Zatwierdzanie transakcji ......................................................................................... 205Zagnie�d�anie transakcji ........................................................................................ 205Punkty przywracania .............................................................................................. 206

Wspó�bie�no�� .............................................................................................................. 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

Page 7: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Spis tre�ci 7

Warto�� domy�lna .................................................................................................. 227Warunek logiczny .................................................................................................. 228Klucz obcy ............................................................................................................. 228Ograniczenia a wydajno�� instrukcji modyfikuj�cych i odczytuj�cych dane ......... 231

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

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

Tworzenie i usuwanie widoków ............................................................................. 235Modyfikowanie widoków ....................................................................................... 238Korzystanie z widoków .......................................................................................... 238Zalety widoków ...................................................................................................... 243

Indeksy ......................................................................................................................... 243Tworzenie, modyfikowanie i usuwanie indeksów .................................................. 245Porz�dkowanie indeksów ....................................................................................... 247

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

Cz��� V Uprawnienia uytkowników,czyli instrukcje GRANT i REVOKE ................................ 251

Rozdzia� 12. Nadawanie i odbieranie uprawnie� ................................................ 253Konta u�ytkowników .................................................................................................... 253

Zak�adanie i usuwanie kont u�ytkowników ............................................................ 254Role .............................................................................................................................. 255

Tworzenie i usuwanie ról ....................................................................................... 255Przypisywanie ról do u�ytkowników ..................................................................... 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 Rozwi�zania zada� ....................................................................... 263Zadania z rozdzia�u 1. ................................................................................................... 263

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

Zadania z rozdzia�u 2. ................................................................................................... 265Zadanie 1. ............................................................................................................... 265Zadanie 2. ............................................................................................................... 265Zadanie 3. ............................................................................................................... 265

Zadania z rozdzia�u 3. ................................................................................................... 266Zadanie 1. ............................................................................................................... 266Zadanie 2. ............................................................................................................... 267Zadanie 3. ............................................................................................................... 267Zadanie 4. ............................................................................................................... 268Zadanie 5. ............................................................................................................... 270

Page 8: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

8 Praktyczny kurs SQL

Zadania z rozdzia�u 4. ................................................................................................... 271Zadanie 1. ............................................................................................................... 271Zadanie 2. ............................................................................................................... 272Zadanie 3. ............................................................................................................... 273Zadanie 4. ............................................................................................................... 274

Zadania z rozdzia�u 5. ................................................................................................... 275Zadanie 1. ............................................................................................................... 275Zadanie 2. ............................................................................................................... 275Zadanie 3. ............................................................................................................... 276Zadanie 4. ............................................................................................................... 276

Zadania z rozdzia�u 6. ................................................................................................... 277Zadanie 1. ............................................................................................................... 277Zadanie 2. ............................................................................................................... 278Zadanie 3. ............................................................................................................... 278Zadanie 4. ............................................................................................................... 279

Zadania z rozdzia�u 7. ................................................................................................... 280Zadanie 1. ............................................................................................................... 280Zadanie 2. ............................................................................................................... 281Zadanie 3. ............................................................................................................... 282Zadanie 4. ............................................................................................................... 284

Zadania z rozdzia�u 8. ................................................................................................... 285Zadanie 1. ............................................................................................................... 285Zadanie 2. ............................................................................................................... 286Zadanie 3. ............................................................................................................... 286Zadanie 4. ............................................................................................................... 288

Zadania z rozdzia�u 9. ................................................................................................... 289Zadanie 1. ............................................................................................................... 289Zadanie 2. ............................................................................................................... 290Zadanie 3. ............................................................................................................... 290

Zadania z rozdzia�u 10. ................................................................................................. 291Zadanie 1. ............................................................................................................... 291Zadanie 2. ............................................................................................................... 291Zadanie 3. ............................................................................................................... 292

Zadania z rozdzia�u 11. ................................................................................................. 293Zadanie 1. ............................................................................................................... 293Zadanie 2. ............................................................................................................... 293Zadanie 3. ............................................................................................................... 294

Zadania z rozdzia�u 12. ................................................................................................. 294Zadanie 1. ............................................................................................................... 294Zadanie 2. ............................................................................................................... 295Zadanie 3. ............................................................................................................... 295

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

Page 9: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9.

Transakcjei wspó�bie�no�

� Czym s� transakcje?

� Co oznacza skrót ACID?

� Jakie s� zalety transakcyjnego przetwarzania danych?

� Na czym polega ró�nica pomi�dzy transakcjami zagnie�d�onymia zagnie�d�aniem transakcji?

� Co oznacza termin „wspó�bie�no��”?

� Po co serwery bazodanowe zak�adaj� blokady?

� Kiedy dochodzi do zakleszcze�?

� Czy warto zmienia� domy�lny poziom izolowania transakcji?

� W jakich sytuacjach optymistyczny model wspó�bie�no�ci jest lepszyni� pesymistyczny?

W�a�ciwo�ci transakcjiTransakcje gwarantuj� spójno�� modyfikowanych informacji. Typowym przyk�a-dem transakcyjnego przetwarzania danych jest przeniesienie pieni�dzy z jednego kontana drugie. Taka operacja przebiega w dwóch etapach:

1. Zmniejszenie o pewn� sum� stanu konta X.

2. Dodanie tej sumy do stanu konta Y.

Page 10: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

Gdyby po wykonaniu pierwszej operacji wyst�pi� b��d uniemo�liwiaj�cy wykonaniedrugiej, z systemu znikn��aby pewna suma pieni�dzy. Równie nieprzyjemnym zaskocze-niem dla w�a�ciciela by�oby sprawdzenie przez niego stanu obu jego kont ju� po odj�ciudanej 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 wchodz�ce w sk�ad transakcji instrukcje albo nie jest zatwierdzana�adna z nich. Innymi s�owy, wszystkie wchodz�ce w sk�ad transakcji instrukcjemusz� by� wykonane poprawnie — je�eli cho� jedna z nich zg�osi b��d, wszystkieprzeprowadzone w ramach transakcji zmiany zostan� wycofane.

2. Spójne (ang. Consistency). Ta cecha transakcji gwarantuje, �e ich wykonanienie doprowadzi, nawet w przypadku awarii serwera, do utraty spójno�ci danych.Poniewa� wszystkie zmiany danych s� wykonywane w ramach transakcji,przechowywane w bazach informacje zawsze b�d� spójne1.

3. Izolowane (ang. Isolation). Izolowanie transakcji wymaga albo zablokowaniamodyfikowanych w ramach jednej z nich danych, albo utworzenia ich dodatkowejwersji. W zale�no�ci od obowi�zuj�cego w ramach serwera lub sesji klienckiejpoziomu izolowania transakcji, mo�e doj�� do nast�puj�cych sytuacji:

a) Utrata aktualizacji (ang. Lost update) ma miejsce, gdy dwa procesy modyfikuj�jednocze�nie te same dane. Przyk�adowo jeden u�ytkownik zmienia cen�towaru na 100 z�, a drugi — na 200. W takim przypadku jedna ze zmianzostanie utracona (zast�piona drug� modyfikacj�). Domy�lnie skonfigurowaneserwery bazodanowe nie dopuszczaj� do utraty aktualizacji.

b) Brudne odczyty (ang. Dirty reads) — do takiej sytuacji dochodzi, gdy mo�liwejest odczytanie zmian niezatwierdzonych jeszcze przez inny proces. Je�eliproces odczytuj�cy nie za��da za�o�enia blokady na odczytywanych danych,uzyska do nich dost�p nawet wtedy, kiedy w�a�nie b�d� modyfikowane.Gdyby proces modyfikuj�cy wycofa� wprowadzone zmiany, odczytane daneokaza�yby si� niespójne. Domy�lnie skonfigurowane serwery bazodanowenie dopuszczaj� brudnych odczytów.

c) Niepowtarzalne odczyty (ang. Non-repeatable reads) maj� miejsce,gdy powtórzenie w ramach transakcji tego samego odczytu daje inny wynik.Ró�nice w wynikach s� spowodowane tym, �e natychmiast po zako�czeniuodczytu (a nie po zako�czeniu ca�ej transakcji) proces odczytuj�cy zdejmujeblokady za�o�one na odczytywane dane. Niezablokowane dane mog� by�zmienione przez inny proces, a wi�c ich powtórne odczytanie da inny(niespójny) wynik. Domy�lnie skonfigurowane serwery bazodanowedopuszczaj� niepowtarzalne odczyty.

d) Odczyty widma (ang. Phantom reads) — sytuacja taka ma miejsce, je�elipomi�dzy dwoma wykonanymi w ramach transakcji odczytami zmieni si�liczba odczytywanych wierszy. Je�li np. podczas pierwszego odczytu w tabeli

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

serwerów bazodanowych.

Page 11: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 201

Produkty znajdowa�o si� 100 produktów o cenach ni�szych ni� 10 z�, instrukcjaSELECT * FROM Produkty WHERE Cena <10 zwróci�aby 100 wierszy. W trakcietrwania transakcji mo�liwa jest jednak zmiana pozosta�ych wierszy tabeli,w tym obni�enie ceny jakiego� produktu poni�ej 10 z�. Mo�liwe jest równie�wstawienie do tej tabeli nowego produktu o cenie np. 7 z�. Z tego powodudrugie wykonanie tego samego zapytania zwróci�oby ju� 102 wiersze.Domy�lnie skonfigurowane serwery bazodanowe dopuszczaj� odczytywidma.

4. Trwa�e (ang. Durability). Trwa�o�� transakcji gwarantuje, �e efektyzatwierdzonych transakcji b�d� zapisane w bazie, nawet w przypadku awariiserwera baz danych. Do przywrócenia spójno�ci danych serwery bazodanowez regu�y u�ywaj� jakiej� formy dziennika transakcyjnego.

Pierwsze litery cech transakcji (A — Atomicity, C — Consistency, I — Isolation, D —Durability) tworz� skrót ACID, powszechnie u�ywany do opisywania regu� przetwarza-nia danych, których musz� przestrzega� serwery bazodanowe, �eby mog�y by� nazwanetransakcyjnymi lub relacyjnymi.

Transakcyjne przetwarzanie danychSerwery bazodanowe mog� dzia�a� w trybie niejawnego zatwierdzania transakcji(w serwerze SQL 2011 taki tryb jest trybem domy�lnym). Oznacza to, �e u�ytkownicynie musz� samodzielnie rozpoczyna� transakcji, bo serwer robi to za nich.

W trybie niejawnego zatwierdzania transakcji wykonanie ka�dej instrukcji j�zyka SQLsk�ada si� z trzech etapów:

1. Serwer bazodanowy automatycznie rozpoczyna now� transakcj�.

2. Wykonywana jest pojedyncza instrukcja SQL.

3. Je�eli instrukcja zosta�a wykonana z powodzeniem, transakcja jestzatwierdzana, w przeciwnym razie jest wycofywana.

Taki sposób dzia�ania oznacza, �e u�ytkownicy nie mog� samodzielnie zatwierdza�lub wycofywa� automatycznie rozpocz�tych transakcji. Dlatego nazywa si� on trybemniejawnego zatwierdzania transakcji.

Poni�szy przyk�ad ilustruje dzia�anie trybu niejawnego zatwierdzania transakcji zapomoc� funkcji systemowej @@TRANCOUNT zwracaj�cej liczb� otwartych, aktywnychw danym momencie transakcji:

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

Page 12: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

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

Jak wida�, przed rozpocz�ciem i po zako�czeniu wykonywania instrukcji UPDATEnie by�o �adnych otwartych transakcji.

Tryb jawnego zatwierdzania transakcji

W niektórych serwerach bazodanowych (np. w serwerze Oracle) domy�lnym trybemtransakcyjnego przetwarzania danych jest tryb ich jawnego zatwierdzania. W tym trybiewykonanie ka�dej instrukcji j�zyka SQL przebiega nast�puj�co:

1. Serwer bazodanowy automatycznie rozpoczyna now� transakcj�.

2. Wykonywana jest pojedyncza instrukcja SQL.

3. U�ytkownik samodzielnie musi zatwierdzi� lub wycofa� otwart� przez serwertransakcj�.

Dzia�anie tego trybu mo�na zasymulowa� w serwerze SQL 2011, ustawiaj�c 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 rozpocz�ciem instrukcji UPDATE równie� nie by�o otwartych trans-akcji, ale niejawnie rozpocz�ta transakcja nie zosta�a po jej wykonaniu automatyczniezamkni�ta. Musi to zrobi� sam u�ytkownik — albo zatwierdzaj�c wprowadzone zmiany,albo je wycofuj�c.

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

Tryb jawnego zatwierdzania transakcji pozwala wycofywa� przypadkowe lub b��dnemodyfikacje, ale zatwierdzanie transakcji, która nie zosta�a przez nas rozpocz�ta,jest ma�o intuicyjne.

Page 13: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 203

Rozpoczynanie transakcji

Mechanizm transakcyjnego przetwarzania danych poka�emy, jawnie rozpoczynaj�ci ko�cz�c transakcje. Pozwoli nam to wykona� w ramach poszczególnych transakcjidowoln� liczb� instrukcji oraz samodzielnie sterowa� czasem rozpocz�cia i zako�cze-nia poszczególnych transakcji.

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

Je�eli teraz w ramach tej samej sesji (czyli w tym samym oknie edytora SQL) zaktu-alizujemy ceny wybranych towarów i sprawdzimy liczb� aktywnych transakcji, dowiemysi�, �e rozpocz�ta przez nas transakcja nadal jest otwarta:

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

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

�eby si� o tym przekona�:

1. W tym samym oknie kodu SQL wykonaj zapytanie:SELECT [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. Zosta�o ono natychmiast wykonane, a cena ka�dej zupy wynosi 1.

3. Aby wykona� to samo zapytanie jako inny u�ytkownik, otwórz nowe oknoedytora SQL3 i skopiuj do niego powy�sz� instrukcj� SELECT (rysunek 9.1).

2 W niektórych serwerach bazodanowych transakcje rozpoczyna si� instrukcjami BEGIN TRANSACTION

lub BEGIN WORK.

Page 14: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

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

Transakcyjne przetwarzanie danych polega na takim realizowaniu ��da� klientówprzez serwery bazodanowe, �eby ka�dy klient mia� wra�enie, i� jest jedynym u�yt-kownikiem serwera. Wymaga to opisanego w dalszej cz��ci rozdzia�u blokowaniaobiektów, do których w danym momencie odwo�uj� si� inni u�ytkownicy serwera.

Wycofywanie transakcji

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

3 Mo�na to zrobi�, naciskaj�c kombinacj� klawiszy Ctrl+N lub klikaj�c przycisk New Query.4 W niektórych serwerach bazodanowych transakcje wycofuje si� instrukcjami ROLLBACK TRANSACTION

lub ROLLBACK WORK.

Page 15: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 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 zdj�cie wszystkich za�o�onych na potrzeby transakcji blokad. Wspomniany napocz�tku rozdzia�u przyk�ad przelania pieni�dzy z jednego konta na drugie móg�by by�zaimplementowany w taki sposób:

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

ELSEROLLBACK TRAN;

Po jawnym rozpocz�ciu transakcji nast�puje wywo�anie dwóch (nieistniej�cych w przy-k�adowej bazie danych) procedur. Je�eli �adna z nich nie zg�osi b��du, ca�a transakcjab�dzie zatwierdzona (zatwierdzi� transakcj� mo�emy, wykonuj�c instrukcj� COMMITTRAN5), w przeciwnym razie zostanie ona wycofana.

Zagniedanie transakcji

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

Dzia�anie mechanizmu zagnie�d�ania transakcji ilustruje poni�szy przyk�ad: wykonanieinstrukcji BEGIN TRAN powoduje zwi�kszenie 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 niektórych serwerach bazodanowych transakcje zatwierdza si� instrukcjami COMMIT TRANSACTION

lub COMMIT WORK.

Page 16: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

Wi�kszo�� serwerów bazodanowych pozwala wycofa� nie tylko ca�� transakcj�, lecztak�e jej cz���. W tym celu nale�y w trakcie transakcji wykona� instrukcj� SAVE TRAN6,a nast�pnie przywróci� j� do danego punktu:

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

Poniewa� przywrócenie stanu transakcji do okre�lonego 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 zosta�a wykonana po zdefiniowaniu punktu przy-wracania PP1, instrukcja ROLLBACK TRAN PP1 przywróci�a stan danych do momentusprzed jej wykonania i w rezultacie tylko pierwszy wiersz zosta� na trwa�e wstawionydo tabeli.

6 W niektórych serwerach bazodanowych punkty przywracania tworzy si� instrukcjami SAVE TRANSACTION

lub SAVE WORK.

Page 17: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 207

Wspó�bie�no�Wspó�bie�no�� to zdolno�� systemu do jednoczesnego realizowania wielu operacji,z regu�y uzyskiwana poprzez uruchomienie osobnych procesów (robotników) na potrzebyobs�ugi poszczególnych ��da�.

Wspó�bie�no�� ma ogromny wp�yw na skalowalno�� serwerów bazodanowych, czyliich zdolno�� do coraz szybszego wykonywania transakcji dzi�ki rozbudowywaniukomputerów, na przyk�ad zwi�kszaniu ich mocy obliczeniowej czy przepustowo�cidysków twardych.

�eby ka�dy z kilkuset czy nawet kilku tysi�cy jednoczesnych u�ytkowników serwerabazodanowego móg� pracowa� tak, jakby by� jego jedynym u�ytkownikiem, koniecznejest odizolowanie od siebie poszczególnych transakcji. Umo�liwiaj� to automatyczniezak�adane blokady.

Blokady

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

Tryby blokad

Tryb blokady decyduje o tym, czy mo�liwe b�dzie jej za�o�enie na zasobie wcze�niejzablokowanym przez inny proces:

1. Blokady wspó�dzielone S (ang. Shared) s� domy�lnie zak�adanena odczytywanych obiektach, takich jak tabele czy wiersze. Na obiektzablokowany w trybie S inne procesy te� mog� za�o�y� blokad� S, czyliodczytuj�cy nie blokuj� innych odczytuj�cych. Blokady S domy�lniezak�adane s� tylko na czas wykonywania zapytania, a nie ca�ej transakcji.

2. Blokady wy��czne X (ang. eXclusive) s� zak�adane na modyfikowanychobiektach. Blokady X s� niekompatybilne z innymi blokadami, czyli modyfikuj�cyblokuj� innych u�ytkowników. W przeciwie�stwie do blokad wspó�dzielonychblokady wy��czne domy�lnie s� utrzymywane do zako�czenia ca�ej transakcji,a nie pojedynczej operacji.

Zakresy blokad

Blokady mog� by� zak�adane na poziomie poszczególnych wierszy, kluczy indeksów,stron, zakresów lub ca�ych tabel. Te obiekty tworz� naturaln� hierarchi�: tabela sk�adasi� z wielu stron, na ka�dej stronie zapisanych jest wiele wierszy itd. Z tego powoduserwery bazodanowe musz� analizowa� wszystkie istniej�ce blokady, zanim za�o��now� — je�eli cho� jeden wiersz tabeli jest zablokowany w trybie X, nie mo�na naca�ej tabeli za�o�y� innej blokady.

Page 18: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

Im wi�ksze obiekty s� blokowane, tym mniejsza wspó�bie�no�� (bo u�ytkownicy musz�d�u�ej czeka� na dost�p do zablokowanych zasobów), ale równie� tym mniejszaliczba blokad, którymi musi zarz�dza� serwer bazodanowy (zostanie za�o�ona jednablokada na ca�ej tabeli zamiast miliona blokad na poszczególnych wierszach).

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

Najcz��ciej wyst�puj� dwa typy zakleszcze�:

1. Zakleszczenia cykliczne, wynikaj�ce z tego, �e dwa procesy w ró�nychkolejno�ciach próbuj� uzyska� dost�p do tych samych zasobów.

2. Zakleszczenia konwersji blokad, zwi�zane ze zmian� wcze�niej za�o�onejblokady wspó�dzielonej (wiele procesów mo�e jednocze�nie zablokowa� tensam zasób w trybie S) na blokad� wy��czn� (tylko jeden proces mo�e za�o�y�na tym samym obiekcie blokad� X).

Serwery bazodanowe automatycznie wykrywaj� zakleszczenia i przerywaj� dzia�aniejednego procesu. Na ofiar� zakleszczenia wybierany jest proces o ni�szym priorytecie,a je�eli oba procesy maj� ten sam priorytet, ofiar� zakleszczenia zostaje ten, któregowycofanie jest mniej kosztowne.

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

Pierwszy u�ytkownik w ramach jawnie rozpocz�tej transakcji modyfikuje kilka danychw tabeli dbo.Dostawcy:

BEGIN TRAN;UPDATE dbo.DostawcySET Firma = UPPER(Firma)WHERE ID<5;;------------------------------------------------------------ (4 row(s) affected)

Nast�pnie inny u�ytkownik w ramach jawnie rozpocz�tej przez siebie transakcji mody-fikuje znacznie wi�cej danych w tabeli Transakcje magazynowe7:

BEGIN TRAN;UPDATE dbo.[Transakcje magazynowe]SET Ilo�� += 1WHERE [ID transakcji] <135;------------------------------------------------------------ (100 row(s) affected)

7 Mo�emy zasymulowa� jednoczesn� prac� dwóch u�ytkowników, otwieraj�c nowe okno edytora SQL

— ka�de z okien nawi�zuje w�asn� sesj� z baz� danych.

Page 19: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 209

W dalszej kolejno�ci pierwszy u�ytkownik próbuje odczyta� zawarto�� tabeli zablo-kowanej ju� przez drug� sesj� (okno wyników mo�e pokaza� kilka wierszy, ale i taku�ytkownik b�dzie musia� czeka� na mo�liwo�� zablokowania w trybie S pozosta�ychwierszy tabeli Transakcje magazynowe):

SELECT *FROM dbo.[Transakcje magazynowe];

W tym momencie nie wyst�pi�o jeszcze zakleszczenie — wystarczy�oby, �eby drugiu�ytkownik zako�czy� swoj� transakcj�. Ale je�eli w ramach drugiej sesji u�ytkownikspróbuje odczyta� zawarto�� tabeli zmodyfikowanej przez pierwszego u�ytkownika, obaprocesy si� zakleszcz�:

SELECT ID, Firma, [Tytu� zawodowy]FROM dbo.Dostawcy;------------------------------------------------------------1 Dostawca A Kierownik ds. sprzeda�y2 Dostawca B Kierownik ds. sprzeda�y3 Dostawca C Przedstawiciel handlowy4 Dostawca D Kierownik ds. marketingu5 Dostawca E Kierownik ds. sprzeda�y…

Po chwili drugie zapytanie zosta�o jednak wykonane, co wi�cej — nazwy firm nie zosta�yprzekonwertowane na wielkie litery. �eby przekona� si�, dlaczego tak si� sta�o, wystarczyprze��czy� si� do okienka pierwszej sesji. Znajdziemy w nim poni�szy komunikat b��du:

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

Je�eli sprawdzimy liczb� otwartych w ramach pierwszej sesji transakcji, oka�e si�, �ejawnie rozpocz�ta przez pierwszego u�ytkownika transakcja zosta�a — zgodnie z komu-nikatem b��du — wycofana:

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

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

Poziomy izolowania transakcjiMo�emy wp�ywa� na sposób zak�adania blokad przez serwery bazodanowe, zmienia-j�c poziom izolowania transakcji. Wi�kszo�� serwerów pozwala ustawi� (na poziomieserwera, bazy danych lub poszczególnych sesji) jeden z czterech poziomów izolowa-nia transakcji, przedstawionych przez nas od najmniej restrykcyjnego, w którym mak-symalna wspó�bie�no�� jest okupiona wyst�powaniem najwi�kszej liczby typów niespój-no�ci danych, do najbardziej restrykcyjnego, który kosztem ograniczenia wspó�bie�no�cigwarantuje najwy�szy poziom spójno�ci danych.

Page 20: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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

Read Uncommitted

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

�eby si� o tym przekona�:

1. W jednej sesji (oknie edytora SQL) rozpoczniemy transakcj� i 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 spróbujemy odczyta� modyfikowane przez innego u�ytkownika dane:

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

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

Ko�cz�c �wiczenie, zamknij bez zatwierdzania otwartej transakcji i na nowo otwórz obaokna edytora SQL — w ten sposób kolejne �wiczenie rozpoczniemy, pracuj�c w domy�l-nym trybie izolowania transakcji.

Read Committed

Tryb odczytu zatwierdzonego (ang. Read Committed) jest domy�lnym poziomemizolowania transakcji. Na tym poziomie odczyt danych wymaga za�o�enia na nichblokady wspó�dzielonej. Poniewa� zak�adana na czas zmiany blokada X jest niekom-patybilna z innymi blokadami, w tym z blokad� S, eliminuje to brudne odczyty. Jednakna tym poziomie nadal wyst�puj� niepowtarzalne odczyty i odczyty widma.

Zjawisko niepowtarzalnego odczytu pokazuje poni�szy przyk�ad:

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

8 Poniewa� ten tryb jest trybem domy�lnym, instrukcja SET jest dodana tylko w celach demonstracyjnych.

Page 21: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 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. Je�eli pierwszy u�ytkownik 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 wspó�dzielone typuS s� utrzymywane do czasu zako�czenia ca�ej transakcji. Dzi�ki temu inny proces niemo�e zmodyfikowa� odczytywanych w jej ramach danych, co eliminuje niepowtarzalneodczyty. Z niekorzystnych zjawisk zwi�zanych z izolowaniem transakcji na tym pozio-mie wyst�puj� tylko odczyty widma.

Zjawisko odczytu widma pokazuje poni�szy przyk�ad:

1. W ramach pierwszej sesji zmienimy poziom izolowania transakcji na RepeatableRead i w ramach jawnie rozpocz�tej transakcji odczytamy nazwy towarówo kodach ko�cz�cych 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 pozosta�ych, niezwróconych przez pierwsze zapytanieproduktu na NWTCO-6, a wi�c na kod spe�niaj�cy warunki pierwszego zapytania:

Page 22: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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. Je�eli pierwszy u�ytkownik raz jeszcze wykona, w ramach tej samej transakcji,to samo zapytanie, tym razem jego wynik b�dzie liczy� wi�cej 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. Je�li jednak w ramach drugiej sesji spróbujemy zmieni� dane odczytywanew ramach nadal otwartej pierwszej transakcji (czyli doprowadzi� doniepowtarzalnego odczytu), instrukcja b�dzie oczekiwa�, a� pierwsza transakcjazostanie zako�czona, a za�o�one dla niej blokady zdj�te:

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

5. �eby powy�sza aktualizacja zosta�a wykonana, w pierwszym oknie edytora SQLwykonaj instrukcj� COMMIT TRAN.

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

Serializable

W trybie szeregowania transakcje odwo�uj�ce si� do tych samych tabel s� wykonywanejedna po drugiej. Blokowanie ca�ych obiektów, a nie tylko odczytywanych danych, naczas trwania transakcji pozwala wyeliminowa� odczyty widma, ale powoduje, �e odczy-tuj�c nawet jeden wiersz tabeli, mo�emy uniemo�liwi� pozosta�ym u�ytkownikomzmodyfikowanie przechowywanych w niej danych.

�eby si� o tym przekona�:

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

SELECT [Nazwa produktu]FROM dbo.Produkty

Page 23: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 213

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

2. Je�eli teraz w drugim oknie edytora SQL spróbujemy zmieni� dane dowolnego,równie� niezwróconego przez pierwsze zapytanie produktu, oka�e si�, �eaktualizacja zosta�a zablokowana i b�dzie wykonana dopiero po zako�czeniupierwszej transakcji:

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

3. Ko�cz�c �wiczenie, zamknij oba okna edytora SQL bez zatwierdzaniarozpocz�tej w jednym z nich transakcji.

W trybie Serializable mamy gwarancj�, �e odczytywane w ramach transakcji danezawsze b�d� takie same — serwer bazodanowy nie dopu�ci nie tylko do ich zmiany, lecztak�e do pojawienia si� nowych danych. Jednak przez ten czas pozostali u�ytkownicy nieb�d� mogli modyfikowa� zablokowanych tabel. W wi�kszo�ci przypadków powodujeto tak znaczne wyd�u�enie czasu reakcji serwera, �e lepiej jest skopiowa� odczytywanedane9, a je�eli zmian nie jest zbyt du�o, prze��czy� si� do modelu optymistycznego.

Model optymistyczny

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

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

Je�eli to za�o�enie jest prawdziwe, czyli je�eli jednoczesne modyfikacje i odczytytych samych danych nie zachodz� zbyt cz�sto, mo�emy znacznie skróci� czas reakcjiserwera10, prze��czaj�c baz� do optymistycznego modelu wspó�bie�no�ci. �eby si�o tym przekona�:

1. W pierwszym oknie edytora SQL wykonamy poni�sze instrukcje, prze��czaj�cbaz� Northwind do modelu optymistycznego:

USE master;ALTER DATABASE NorthwindSET READ_COMMITTED_SNAPSHOT ON

9 Niektóre serwery bazodanowe pozwalaj� utworzy� migawk� (ang. Snapshot) danych.10 Niektóre serwery bazodanowe, np. serwer Oracle, domy�lnie dzia�aj� w optymistycznym modelu

wspó�bie�no�ci.

Page 24: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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 po��czymy si� z baz� Northwind i w ramachjawnie rozpocz�tej transakcji zmienimy dane dwóch pracowników:

USE Northwind;BEGIN TRAN;UPDATE dbo.PracownicySET Nazwisko = 'X'WHERE ID <3;------------------------------------------------------------ (2 row(s) affected)

3. W nowym oknie edytora SQL odczytamy dane o kilku pracownikach:SELECT ID, NazwiskoFROM dbo.PracownicyWHERE ID <3;------------------------------------------------------------1 Ciesielska2 Czupta

4. Okazuje si�, �e tym razem zapytanie zosta�o wykonane natychmiast, alez zachowaniem wymogów domy�lnego trybu izolowania transakcji, czyli trybuRead Committed — pozostali u�ytkownicy serwera odczytaj� ostatni�zatwierdzon� wersj� danych. Gdyby rozpocz�ta w ramach pierwszej sesjitransakcja zosta�a zatwierdzona, to ponowne wykonanie tego samego zapytaniazwróci�oby najnowsz�, zatwierdzon� wersj� ze zmienionymi danymi dwóchpierwszych pracowników.

Model pesymistyczny

W modelu pesymistycznym odczytuj�cy s� blokowani przez modyfikuj�cych (ser-wer b�dzie czeka� z za�o�eniem blokady S, a� zdj�ta zostanie blokada X), a modyfi-kuj�cy przez odczytuj�cych (za�o�enie blokady X wymaga zdj�cia blokady S).

Poniewa� koszt zarz�dzania wieloma wersjami tych samych danych ro�nie wraz zewzrostem wersjonowanych danych, w tym modelu zak�ada si� (pesymistycznie), �eodczytywane dane b�d� w tym samym czasie regularnie modyfikowane.

�eby przywróci� pesymistyczny (domy�lny) model wspó�bie�no�ci bazy Northwind,nale�y wykona� poni�sze instrukcje:

USE master;ALTER DATABASE NorthwindSET READ_COMMITTED_SNAPSHOT OFFWITH ROLLBACK IMMEDIATE;------------------------------------------------------------Nonqualified transactions are being rolled back. Estimated rollback completion:�100%.

Page 25: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Rozdzia� 9. � Transakcje i wspó�bieno�� 215

Podsumowanie� Serwery bazodanowe przeprowadzaj� wszystkie zmiany danych w ramach

jawnie lub niejawnie rozpocz�tych transakcji.

� Transakcje powinny by� otwierane jak najpóniej i zamykane jak najwcze�niej.

� Transakcje powinny zawiera� tylko powi�zane ze sob� instrukcje.

� Przerwane (czy to z powodu awarii klienta, czy te� serwera) transakcje b�d�wycofane.

� Na czas trwania transakcji pewne obiekty bazy danych s� automatycznieblokowane.

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

� Odizolowanie, jedn� z czterech cech ACID transakcji, uzyskuje si� za pomoc�automatycznie zak�adanych i zwalnianych blokad.

� Mo�na sterowa� sposobem zak�adania i czasem trwania blokad, zmieniaj�cpoziom izolowania transakcji.

� W modelu optymistycznym serwery bazodanowe wersjonuj� dane, co poprawiawspó�bie�no�� kosztem wi�kszego obci��enia serwera.

Zadania 1. Twoim zadaniem jest przygotowanie raportu podsumowuj�cego roczn� sprzeda�.Wyliczaj�c sumy i �rednie warto�ci sprzeda�y produktów, kilkukrotnie musiszodczyta� tabel� dbo.Produkty. Jak zagwarantujesz poprawno�� wyników raportu?

2. Po przerwie na lunch u�ytkownicy zg�aszaj�, �e próby dalszej pracy z baz�danych ko�cz� si� chwilowym „zawieszeniem” programu i wreszcie komunikatemb��du mówi�cym, i� serwer bazodanowy jest niedost�pny. Po sprawdzeniuokazuje si�, �e serwer i sie� dzia�aj� normalnie, a baza nie zosta�a uszkodzona.Co jest najbardziej prawdopodobn� przyczyn� problemu?

3. W ramach tworzonej procedury modyfikujesz du�e ilo�ci danych zapisanychw kilkunastu tabelach oraz wstawiasz jeden wiersz, informuj�cy o wykonaniuwszystkich operacji, do tabeli znajduj�cej si� w bazie danych na zdalnymserwerze. Po��czenie mi�dzy serwerami jest mocno obci��one i zdarza si�,�e czas nawi�zywania sesji i przesy�ania danych pomi�dzy serwerami wielokrotniesi� wyd�u�a. Co zrobi�, aby w przypadku zg�oszenia przez procedur� b��dubraku po��czenia ze zdalnym serwerem nie trzeba by�o ponownie wykonywa�d�ugotrwa�ych modyfikacji danych?

Page 26: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Skorowidz

Aaccess, 10ACID, 201aktualizacja

automatyczna warto�ci kluczy, 230danych, 191danych wybranych na podstawie danych z

innych tabel, 193danych za pomoc� wyra�e� odwo�uj�cych si�

do innych tabel, 194utrata, 200wielu kolumn jednocze�nie, 192

alias, 59, 93apostrof, 74argument

SARG, 85, 132

Bbaza danych, 9, 22, 219

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

blokada, 207tryb, 207wspó�dzielona, 207wy��czna X, 207zakres, 207

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

proste, 160, 162rekurencyjne, 162

czcionka o sta�ej szeroko�ci, 15

Ddane

aktualizacja, 191aktualizacja na podstawie danych

z innych tabel, 193aktualizacja za pomoc� wyra�e�

odwo�uj�cych si� do innych tabel, 194grupowanie

wydajne, 132przetwarzanie pojedy�cze, 34tekstowe

generowanie, 99��czenie, 55sortowanie, 63

typ, 20, 42usuwanie, 189wstawianie, 183

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

j�zyka SQL, 39dokument XML, 42

XML, 42duplikat, 52

eliminacja, 105dyrektywa GO, 85

Ffunkcja

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

Page 27: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

298 Praktyczny kurs SQL

funkcjaarytmetyczna

RAND, 56ROUND, 56SQRT, 56

CASE, 58CAST, 57czas

DATEADD, 57data

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

GROUPING, 128GROUPING_ID, 128grupuj�ca

AVG, 119CHECKSUM_AGG, 121COUNT, 118COUNT_BIG, 121MAX, 120MIN, 120STDEV, 121STDEVP, 121SUM, 119VAR, 121VARP, 121zagnie�d�anie, 122

rankingu, 136systemowa, 55tabelaryczna

��czenie, 112znakowa

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

Iidentyfikator, 24, 37, 50

spedytora, 146iloczyn kartezja�ski, 98indeks, 22, 81, 87, 235, 243

modyfikowanie, 245odtworzenie, 247opcje, 247

tworzenie, 245uporz�dkowanie kluczy, 248usuni�cie, 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, 194modyfikuj�ca, 231REVOKE, 257, 258SELECT, 54, 236SELECT … INTO, 187TRUNCATE TABLE, 189, 191UPDATE, 191, 192

InterBase, 10InterBase Firebird, 10

Jj�zyk

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

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

Page 28: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

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 jednocze�nie, 192komentarz, 37, 39kompilator, 35konsola SSMSE, 14konstruktor

wiersz, 187konto u�ytkownika, 253

usuwanie, 254zak�adanie, 254

konwencja, 15kursywa, 15

Llista warto�ci, 149litera�, 37, 38, 60logika trójwarto�ciowa, 67

���czenie

danych tekstowych, 55

Mmodel

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

MySQL, 10

Nniepowtarzalno��, 227niezgodno��

sk�adni, 26typów, 26u�ycia, 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��� wspólna, 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, 137porównania, 38, 71

mniejszy lub równy, 71mniejszy ni�, 71równy, 71ró�ny, 71wi�kszy lub równy, 71wi�kszy ni�, 71

Page 29: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

300 Praktyczny kurs SQL

operatorROLLUP, 126ró�nica, 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 ród�a danych, 156niepowi�zane, 146niezwracaj�ce �adnych warto�ci, 150powi�zane, 151usuwanie wyników, 190zagnie�d�anie, 151zwracaj�ce list� warto�ci, 149

pogrubienie, 15posta�

normalnadruga, 30pierwsza, 29trzecia, 30

sterty, 243uporz�dkowana struktura, 243

PostgreSQL, 10postulat

dost�pu, 28fizycznej niezale�no�ci danych, 28informacyjny, 28logicznej niezale�no�ci danych, 28modyfikowania bazy danych przez widoki, 28modyfikowania danych na wysokim poziomie

abstrakcji, 29niezale�no�ci dystrybucyjnej, 28niezale�no�ci ogranicze�, 29pe�nego j�zyka danych, 28postulat Codda

dotycz�ce integralno�ci danych, 29dotycz�ce przetwarzania danych, 28dotycz�ce struktury danych, 27

s�ownika danych, 29warto�ci, 29

zabezpieczenia przed modyfikacjamiprzeprowadzanymi za pomoc� j�zykówproceduralnych, 28

poziomizolowania transakcji, 209zgodno�ci, 43

pe�ny, 40podstawowy, 40po�redni, 40

przetwarzaniepojedynczych danych, 34zbioru, 34

punkt przywracania, 206

RRead Committed, 210Read Uncommitted, 210rekord, 20

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

przypisanie ról do u�ytkowników, 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, 42s�owo kluczowe, 37, 38

DESC, 61DISTINCT, 53, 118

SQLdialekt j�zyka, 39SQL PL, 40SQL Server, 10SQL Server 2011, 10

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

Page 30: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

Skorowidz 301

stronicowanie, 80wierszy, 79

symbol, 15, 52, 83nadu�ywanie, 184

Ttabela, 81, 95, 219

��czenie, 89��cznikowa, 30pochodna, 157s�ownikowa, 30tworzenie, 222usuwanie, 222

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

cechy, 201izolowana, 200niepodzielna, 200poziom izolowania, 209przetwarzanie danych, 201, 204spójna, 200trwa�a, 201tryb jawnego zatwierdzenia, 202tryb niejawnego zatwierdzenia, 201w�a�ciwo�ci, 199wycofanie, 204zagnie�d�anie, 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 u�ytkowników, 256do modyfikowania ról, 256do odczytywania metadanych obiektów, 256do przejmowania obiektów na w�asno��, 256do tworzenia funkcji, 256do tworzenia procedur, 256do tworzenia schematów, 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, 230domy�lna, 185, 227FALS, 69nieznana, 42, 150NO ACTION, 230NULL, 42, 68, 186odczytanie, 146przypisanie, 146SET DEFAULT, 230SET NULL, 230TRUE, 69UNKNOWN, 68, 69

Page 31: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi

302 Praktyczny kurs SQL

waruneklogiczny, 228

z�o�ony, 75z��czenia, 96

widok, 235, 243grupuj�cy dane, 240modyfikowanie, 238modyfikowanie danych, 240tworzenie, 235usuwanie, 235zagnie�d�ony, 239

wiersz, 20grupowanie, 117��czenie, 112stronicowanie, 79wybór, 67zliczanie, 118

wskanik, 81wspó�bie�no��, 199, 207wynik

formatowanie, 58sortowanie, 60

wyra�enie, 54, 121, 193tabelaryczne, 159

Zzakleszczenie, 208

cykliczne, 208konwersji, 208

zapytanie��czenie wyników, 107wewn�trzne, 146wstawianie wyników, 187zagnie�d�one, 145

zasadaminimalnych uprawnie�, 261sprzeczno�ci, 67to�samo�ci, 67wy��czonego �rodka, 67

zbiórprzetwarzanie, 34rekordów, 20

z��czenie, 155FULL OUTER JOIN, 98krzy�owe, 98LEFT OUTER JOIN, 97lewostronne, 97naturalne, 89, 92nienaturalne, 89, 92nierówno�ciowe, 94, 95obustronne, 98okre�lenie kolejno�ci, 103prawostronne, 97RIGHT OUTER JOIN, 97równo�ciowe, 94tabeli z ni� sam�, 104wielokrotne, 100zewn�trzne, 96

zmienna, 148

Page 32: Praktyczny kurs SQL. Wydanie IIpdf.helion.pl/pksql2/pksql2.pdfa zagniedaniem transakcji? Co oznacza termin „wspóbieno”? Po co serwery bazodanowe zakadaj blokady? Kiedy dochodzi