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.
Typy danych o których mówiłem w pierwszej lekcji tego rozdziału są
sposobem na ograniczenie jakiego typu danych chcemy przechowywać w
bazie niestety pozwalają one na jedynie dość ogólne ograniczenie
danych jeśli na przykład chcielibyśmy żeby nasza kolumna przechowywała
liczby całkowite większe od zera to niestety nie ma takiego typu
danych musimy sięgnąć po mocniejsze ograniczenia zanim jednak
zaczniemy sięgać szybko omówmy rozwiązanie zadania do przepracowania
z poprzedniej lekcji zadaniem do zrobienia było
stworzenie nowych postaci używając dostępnych poleceń typu
insert a następnie naprawa odpowiednich
elementów żeby można było wpisywać kolejne postaci pierwszym
krokiem jest otworzenie pliku w którym znajdują się inserty
i skopiowanie ich do w naszym przypadku pg
admina i uruchomienie jak
zapewne zauważyłeś inserty które tu wkleiłem dodają
dane ale zawierają też wartość atrybutu hero id
normalnie kiedy dodajemy nowe dane to nie
podajemy tego parametru dlatego że chcemy żeby baza sama go
dodała automatycznie spróbujmy teraz dodać
nową postać próbujemy dodać nowy rekord chciałbym
szybko przedstawić cztery podstawowe typy ograniczeń które
użyjemy w naszej bazie po
pierwsze check constraints dzięki
temu możemy wprowadzać ograniczenia na wartości zapisywane
w kolumny możemy też wprowadzać ograniczenia na poziomie tabeli definiując w
zależności pomiędzy kolumnami zobaczmy w jaki
sposób możemy uzdatnić naszą
tabelę w naszym przypadku chcielibyśmy
upewnić się nałożyć takie ograniczenie
żeby w kolumnie płeć można było
wstawić tylko wartość m albo k odpowiednio
oznaczającą mężczyzną lub kobietę i nic innego możemy
to zrobić modyfikując kolumnę gender skoro
chcemy zmodyfikować kolumnę do tego
użyję polecenia dml alter table i dodam
ograniczenie typu check które będzie zdefiniowane w ten sposób żeby
wartość w kolumnie gender musi znajdować się w zbiorze
takich oto znaków w ten
sposób dodaliśmy nowe ograniczenie teraz
możemy odświeżyć listę ograniczeń i
możemy zoabczyć że oprócz ograniczenia na kolumnie hero
id o którym za chwilę mamy nasze ograniczenie na kolumnę
gender teraz jeżeli będę chciał zmienić płeć na dziwną
to mi się to nie uda następnym
rodzajem ograniczenia które chciałem ci przedstawić jest
ograniczenie not null jest to dość proste ograniczenie nie
pozwala ono na zapisywanie pustych danych do danej kolumny na
razie w naszej bazie wszystkie dane mamy zapełnione natomiast
w tej chwili nic nie broni nam
usunąć którąś z tych dane na przykład siłę u pierwszego bohatera
naszego możemy spokojnie ustawić ją
na null na wartość pustą
wszystko będzie
w większości wypadków nie chcemy wartości
pustych chcemy żeby baza była jak najgęściej
spopulowana generalnie nie wyobrażamy sobie bohatera który nie miałby imienia
nazwiska czy nie miał wartości siły przywrócimy
tą wartość i
spróbujmy na kolumnie właśnie strength
nałożyć ograniczenie
żeby nie mogła być ona pusta znowu
odwołujemy się do polecenia alter table a
następnie chcemy zmienić kolumnę strength tak
żeby nie pozwalała wpisywać wartości pustych do tego służy polecenie set not null
komenda alter table alter column słowo column jest
tutaj opcjonalne ale dla czytelności je dodam w tym momencie
jeżeli uruchomię takie zapytanie już nie będzie można rezerwować
wartości tej kolumny zobaczmy jak to
wygląda i nowe ograniczenie nie pozwala nam pisać
wartości null dostaniemy informację że
niestety ale ta wartość narusza nasze ograniczenie które
przed chwilą nałożyliśmy następne ograniczenie o którym chciałem wspomnieć
to ograniczenie unique które wymusza unikalność danych w
danej kolumnie w naszej tabeli jedyną taką unikalną
kolumną jest kolumna identyfikatora czyli hero id i nie
musimy w tej chwili nic tam zmieniać a dlaczego już za chwilę
wiąże się to z jeszcze jednym ograniczeniem o którym
chciałem wspomnieć jest to ograniczenie primary key który
wyznacza daną kolumnę jako klucz główny
dla bazy jest to powiązanie dwóch ograniczeń not null i unique
dlatego że wartości identyfikujące
unikalny wiersz muszą być unikalne oczywiście i
nie mogą być też puste ograniczenie primary
key założyliśmy już wcześniej na kolumnie hero id i
jest ono tutaj obrazowane przez taki kluczek
a także widać to w danych wylistowanych poprzez
litery pk od primary key w kolumnie hero id
oprócz tak jak jak wspomniałem zapewnienia unikalności
i nie pozwolenie na puste wartości założenie
klucza głównego zakłada także indeks na tej kolumnie który
przyspiesza dramatycznie wyszukiwanie
danych używając tej kolumny w klauzuli where o
indeksach będę więcej mówił na w
następnych rozdziałach możesz się zdziwić dlaczego nasze ograniczenie niezerowej
wartości niepustej wartości na kolumnie strength nie pojawiło się na tej liście pomimo
odświeżenia jest tak dlatego że jest to ograniczenie
tej kolumny natomiast te ograniczenia które tutaj są
wymienione są to ograniczenia odnoszące
się do całej tabeli mimo że na
przykład heroes gender check dotyczy tylko kolumny gender
to jednak definiowaliśmy go jako ograniczenie
na całej tabeli to ograniczenie na kolumnie strength
można sobie podejrzeć jeżeli zobaczymy definicje
w postaci polecenia sql w tym wypadku tej
kolumny
Dodawanie ograniczeń danych to tabeli · 3 min
-- Dodanie ograniczenia CHECK, które zezwala na użycie tylko liter 'M' i 'K' w kolumnie 'gender'
ALTER TABLE heroes ADD CHECK (gender IN ('M', 'K'));
-- Próba ustawienia innej wartości powoduje błąd
UPDATE heroes SET gender = 'Z' WHERE hero_id = 1;
-- Przypisanie wartości NULL powiedzie się dla kolumny 'strength'
UPDATE heroes SET strength = NULL WHERE hero_id = 1;
-- Wracamy do oryginalnej wartości pola
UPDATE heroes SET strength = 15 WHERE hero_id = 1;
-- Ustawienie zabezpieczenia przed pustymi wartościami
ALTER TABLE heroes ALTER COLUMN strength SET NOT NULL;
-- Teraz przypisanie wartości NULL spowoduje błąd
UPDATE heroes SET strength = NULL WHERE hero_id = 1;