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.
Z poprzedniej lekcji podczas operacji w
transakcjach był moment kiedy jedna z transakcji czekała na drugą aż
skończy i zapisze zmiany skąd ta transakcja wiedziała
że musi poczekać ponieważ próbowała zaktualizować te
same dane co wcześniejsza transakcja napotkała na blokadę
tych danych założoną przez pierwszą transakcję przy
udostępnianiu aplikacji i danych użytkownikom warto
żebyś miał świadomość mechanizmu blokowania dostępu gdyż może one wpłynąć
na to jak klienci będą doświadczali twoje
aplikacje nikt nie jest zadowolony gdy chce wypłacić pieniądze
i musi czekać kilka minut na zakończenie operacji w momencie
kiedy ona jest spowoliona założoną przez inną
operację blokadą zanim przejdziemy dalej jednak dwa
słowa na temat rozwiązania zadania do przepracowania z poprzedniej
lekcji zadanie w poprzedniej
lekcji polegało na określeniu jaki poziom ilustracji
był potrzebny najniższy poziom izolacji do
operacji wprowadzania danych prostych danych kolejnych
użytkowników do do systemu może miałeś taką
myśl że jest to poziom izolacji read commited w tego typu transakcjach
dane od siebie nie zależą i nie są wprowadzane hurtowo
więc taki poziom izolacji najmniejszy jest wystarczający
i też pozwala na łatwe właśnie zrównoleglenie
zadań do wykonania mam nadzieję że miałeś
podobną odpowiedź a teraz przejdźmy już do tego o
co chodzi z blokadami blokady
wykorzystywane są po to żeby zachować spójność danych przy niektórych operacjach
zwykle blokady dotyczą tabel i wierszy rzadziej
kolumn czy zakresów adresów na dysku skupmy się na tych
najczęściej spotykanych blokady można podzielić ze
względu na ich poziom poszczególne poziomy mogą się nawzajem wykluczać
dla blokach w tabeli można wyróżnić trzy
poziomy dzielone blokady tak zwane shared locks na przykład
zapytania typu select zakładają taką blokadę jeśli
jest ona założona niektóre inne zapytania nie mogą zostać wykonane jak
na przykład alter table nie można zmodyfikować
tabeli w trakcie kiedy ta tabela jest odczytywana
takie zapytanie jeżeli zostanie uruchomione w
trakcie kiedy pobierane są wiersze przez polecenie
select będzie musiało poczekać aż to polecenie select
pobierze wszystko zwolni blokadę i
będzie można działać dalej następnym poziomem są blokady
średniego poziomu tak to umownie nazwałem dlatego
że każdy silnik bezy danych ma troszkę inne nazwy tych
poziomów ale generalnie dzielą się na
tego typu obszary czy też poziomy więc blokady
średniego poziomu są zakładane przez zapytania typu
update czy create index tak
jak przy blokadzie dzielonej inne zapytania typu update mogą
zostać wykonane gdy jedna z zapytań
jedno z transakcji update zakłada blokadę to
czy polecenie update będzie musiało czekać zależy
od blokad na poziomie wierszy już do których zaraz
przejdziemy na koniec blokady wyłączne tak zwane
exclusive logs takie zapytania jak alter table czy
truncate wymagają braku jakichkolwiek operacji
na tabeli więc blokują wszystkie inne zapytania stąd
exclusive locks czyli wyłączność dostępu
tabeli dla konkretnego zapytania które
modyfikuje w jakiś sposób tabelę czy strukturę
czy tak jak truncate w ogóle tworzy nową
pustą tabelę i do momentu zakończenia tej
operacji żadne inne polecenia nie mogą działać dla
blokad wierszy chciałbym żebyśmy przyjrzeli się
dwóm głównym poziomom blokad blokady do aktualizacji taka
blokada jest zakładana gdy wybieramy jakieś rekordy w transakcji
do aktualizacji do update przez zapytanie select
for update rekordy w ten sposób wybrane
nie mogą zostać zaktualizowane lub usunięte dopóki
transakcja w której to zostało uruchomione nie zostanie
zakończone pomyślnie lub nie natomiast blokada podzielona
czy to podziału która podobna jest do blokady
for update tym że nie pozwoli na aktualizację czy skasowanie
wybranych rekordów ale nie blokuje ich dla innych zapytań
typu select coś tam coś tam for share to znaczy że
można kilka operacji typu select for share uruchomić
które nawzajem będą wykonane natomiast jeżeli
pojawi się zapytanie select for update będzie ono musiało poczekać
aż wszystkie operacje wszystkie zapytania select for share
na danych w wierszach zostaną
zakończone mam nadzieję że to wprowadzenie
do blokad w sql pozwoli ci lepiej zrozumieć co się
dzieje w bazie i dlaczego to jedno zapytanie w twojej
aplikacji czy systemie czeka tyle czasu na nie wiadomo
co a tak naprawdę na inne zapytania