Podstawy
4 godz. 8 min · Bazy Danych · Full-stack i Programowanie
Pierwszy rozdział wprowadza w historię powstania języka. Wspomnimy o standardach, wykorzystywanych wersjach i podzbiorach SQL’a. Zaraz potem wskoczymy w pierwsze poważne operacje, które pozwolą na pełny cykl tworzenia, zasilania bazy danych i wyciągnięcia z niej wybranych informacji. Rozwikłamy też tajemniczy akronim - CRUD.
Skoro potrafimy już tworzyć bazę i tabele, w które możemy wstawić nowe wiersze, dowiemy się więcej o bardzo ważnej funkcji bazy danych: weryfikacji danych. Zostaną zaprezentowane mechanizmy i techniki, które pomogą utrzymać spójność danych.
W kolejnych lekcjach znajduje się opis serca SQL’a, czyli polecenia wybierającego dane i możliwości i opcji z nim związanych. Od przekształcenia bazy danych w prosty kalkulator, aż do warunków filtrowania wybieranych danych (klauzulą WHERE), sortowania ich (klauzulą ORDER BY), czy ograniczania dużych zestawów wynikowych - w tym wsparcia do paginacji.
SQL jest językiem obsługi relacyjnych baz danych. Dlatego najwyższy czas, aby wspomnieć o relacjach i tym w jaki sposób rozszerzają one możliwości wyszukiwania danych oraz pozwalają zobrazować powiązania między danymi w bazie. Dowiesz się o różnych rodzajach połączeń między tabelami i jak te połączenia (zwane JOIN’ami) pozwalają wybrać to, czego potrzebujesz.
Kolejny rozdział dotyczy grupowania danych (wykorzystując klauzulę GROUP BY) i związanych z tym nowymi możliwościami. Dowiesz się tutaj też w jaki sposób agregować pogrupowane dane i jak takie zagregowane dane filtrować.
Przekonasz się, w jaki sposób można zapamiętywać trudne lub często wykonywane zapytania, wykorzystując do tego widoki (VIEWS) i jak można poprawić wydajność pobierania z nich danych. Przykładowo zastosujemy widoki zmaterializowane (MATERIALISED VIEWS). W tym rozdziale przećwiczysz też możliwość zapisywania danych przez widoki.
Z baz danych korzysta zwykle wielu użytkowników. Aby operacje, które wykonują na wspólnej bazie nie spowodowały nieoczekiwanych konsekwencji, wykorzystuje się mechanizm transakcji. W tym rozdziale wytłumaczymy Ci w jaki sposób użytkownicy mogą modyfikować równolegle te same dane. Tutaj też dowiesz się o poziomach izolacji transakcji i jak używać ich w różnych sytuacjach bazodanowych.
Przy pracy z większą ilością danych, bardzo szybko doświadczysz spowolnienia wykonywania zapytań. O tym jak je przyspieszyć dowiesz się właśnie w tym rozdziale. Zwiększanie wydajności zapytań jest tematem rozległym i zaawansowanym. Tutaj będziesz miał szansę poznać podstawy, w tym - po co są i jak używać indeksów, w jaki sposób analizować jak zapytania są wykonywane i jakie jeszcze są metody wydajniejszego odczytywania danych.
Kurs jest dla osób początkujących, rozpoczynających przygodę z bazami danych. Nie wymaga się znajomości SQL'a ani zaawansowanej wiedzy dotyczącej baz danych. Warto wiedzieć co to są relacyjne bazy danych. Dobrze mieć dostęp do ulubionego silnika bazy danych, ale nie jest to wymagane.
Tą lekcję nietypowo zacznę od małego przykładu przykład
dotyczy operacji na bazie wszystkie operacje wykonywane
do tej pory były wykonywane w transakcjach tylko
nie było to widoczne każda operacja każde zapytanie było
poprzedzone rozpoczęciem transakcji i zakończone zamknięciem
transakcji tylko że było to robione w tle przez bazę a
teraz rozpoczniemy transakcje ręcznie słówkiem
begin żeby kontrolować to co się dzieje i za
szybko jej nie zamknąć następnie wykasujemy kilku
bohaterów możemy
to już odpalić zostali wykasowani
ale zanim zamkniemy transakcję
straszna rzecz się stanie
serwer zostanie wyłączony mógłby zostać wyłączony
z wielu powodów awaria zasilania przepełnienie
się dysku w tym wypadku akurat będzie to ręczne wyłączenie które
jest najłatwiej zasymulować ale efekt jest ten sam widzimy
że coś się stało z połączeniem skoro wyłączyliśmy serwer
to utraciliśmy z nim połączenie dobrze serwer
się wyłączył a co się stało z naszą transakcją uruchommy
na nowo serwer i zobaczymy co się stało z danymi które
chcieliśmy zmodyfikować okazuje
się że wszyscy bohaterowie są żaden nie został usunięty
transakcja nie doszła do skutku nie zatwierdziliśmy jej
a to że serwer został zatrzymany
spowodowało że wszystkie zmiany które chciałem dokonać w czasie
tych transakcji zostały cofnięte no właśnie co
to są transakcje otóż jak właśnie miałeś okazje doświadczyć
mechanizm transakcji pozwala na wykonanie kilku zapytań w
jednym bloku tak jak domyślnie pojedyncze zapytanie od razu jest
pakowane w transakcje możemy ręcznie stwierdzić
że teraz chcemy w kilka zapytań włożyć do transakcji
i tak się stanie a w ramach transakcji wszystkie zapytania w
bloku są albo wykonane albo żadne z nich nie
jest wykonane tak jak teraz było że nastąpił błąd i
zostało cofnięte wszystko tak naprawdę jeżeli te inne zapytania
tam umieścił które modyfikują dane wszystkie
one by zostały wycofane transakcje
zapewniają cztery właściwości operacji na bazie danych
które są uznane pod akronimem acid czego
dotyczą te cztery litery odpowiadają
one czterem charakterystykom operacji
atomicity consistency isolation i durability atomicity
czyli niepodzielność zapewnia że transakcja zostanie wykonana
w całości albo w ogóle nie zostanie wykonana to co już widziałeś
consistency dotyczy spójności czyli że
po wykonaniu transakcji wszystkie dane są spójne jeżeli modyfikujemy
coś w tabeli powiązanej na przykład to że
te powiązania nadal będą odpowiednio zdefiniowane
isolation dotyczy zmian
współbieżnych znaczy jeżeli dwóch użytkowników modyfikuje rzeczy
w bazie to nawzajem nie widzą zmian przez
siebie wprowadzanych albo na przykład widzą tylko częściowo dopóki
ich nie zatwierdzą dopóki transakcja nie zostanie
zamknięta pozytywnie i trwałość durability
dotyczy tego że wszystkie operacje które
są podczas transakcji realizowane są
trwale zapisane i są dostępne dzięki temu dla
innych operacji dla innych transakcji jeżeli
chodzi o izolację to rozróżniane są cztery
poziomy izolacji w następnej lekcji będę chciał ci pokazać na przykładach
jak wyglądają transakcje dla różnych poziomów izolacji na razie
opowiem o 4 standardowych poziomach wykorzystywanych
w bazach danych zaczynając od najbardziej restrykcyjnego poziomu czyli
serializable gdzie blokowanie jest
zapisów i odczytów podczas
równoległych transakcji w efekcie możemy powiedzieć że każda
transakcja jest wykonywana jedna po drugiej
czyli jedna transakcja czeka aż zostanie
zakończona inna transakcja która korzysta z tych samych
danych to blokowanie zapisów i
odczytów także dotyczy to zakresów danych przy równoległych
transakcjach oznacza nic innego jak to że one
są wykonywane jedna po drugiej czyli po prostu
nie są zrównoleglane czyli są serializowane
jeżeli tylko dotyczą podobnych
obszarów dalej poziom repeatable read gdzie blokowane są też zapisy i
odczyty ale nie dotyczy to zakresów danych następnie
najbardziej popularny poziom izolacji nie tak restrykcyjny
jak poprzednie dwa natomiast nadal dający spójność
danych przy wykonywaniu transakcji czyli poziom
read commited gdzie blokowane są tylko z zapisy natomiast blokady
odczytów nie i ostatni typ read uncommited właściwie
nieużywany który nie ma blokowania ani zapisów ani odczytów to
znaczy że w trakcie wykonywania transakcji wszystko może
się zmienić to jest sytuacja której raczej nie
chcemy mieć dlatego też raczej takiego poziomu izolacji się
nie stosuje
01-przykład_użycia_transakcji.sql · 1 min
-- zaczynamy transakcję
BEGIN;
-- wykonujemy operację na bazie
DELETE FROM heroes WHERE hero_id < 10;
-- tutaj wyłączamy serwer (ręcznie)
-- po ponownym włączeniu dane powinny być bez zmian (usunięcie rekordów zostało cofnięte automatycznie)
SELECT * FROM heroes WHERE hero_id < 10;