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.
Witaj chciałbym teraz opowiedzieć ci o ważnym
i bardzo przydatnym mechanizmie sekwencje o których
będzie mowa pozwalają na automatyczną inkrementację wartości
liczbowych nie jest to ograniczenie jako takie natomiast pozwala uporządkować
niektóre dane zobaczmy jak to nam się przyda w naszej
bazie wracając do naszej kolumny
identyfikacyjnej która przechowuje kolejna identyfikatory
naszych bohaterów za każdym razem kiedy wpisujemy nowego bohatera musimy popatrzeć
jakie dane mamy sprawdzić najwyższy
identyfikator i wstawić wtedy w nowym wierszu kolejny
numer no ale można sobie wyobrazić że wpisując tak ręcznie
nie dość że to jest uciążliwe to można łatwo popełnić błąd tak i
wpisać o jeden numer za dużo dobrze by było w takim razie
nie musieć sprawdzać jaka jest najwyższa wartość przy wprowadzeniu
nowego rekordu i w ogóle nie martwić się za bardzo tym
zwiększaniem kolejnych wartości możemy to zrobić definiując
kolumnę hero id jako kolumnę identyfikatorów z
automatycznie generowanymi wartościami jak to możemy zrobić przejdziemy
do okienka z kwerendami będziemy chcieli zmienić tabelę
heroes i będziemy chcieli zmienić kolumnę
hero id i dodajemy wtedy
add generated by identity i
bum nasza kolumna hero id w tej chwili będzie
generowała nowe wartości możemy to sprawdzić dodając
nowego bohatera teraz nie musimy
już podawać wartości do ostatniej kolumny dlatego
że będzie ona wygenerowana automatycznie możemy zapisać naszego
nowego bohatera a tu niespodzianka baza próbowała
zapisać wartość 1 w miejscu hero id dlaczego
tak się stało wspominałem na samym początku o sekwencjach otóż w momencie kiedy
ustawiliśmy kolumnę hero id jako kolumny identyfikującą
z autogenerowanymi danymi została stworzona do
niej sekwencja tutaj mamy możemy odświeżyć listę
sekwencji proszę bardzo heroes hero id sequence to jest właśnie ta
sekwencja sekwencje można traktować jak jednowierszowe tablice
w której zapisane są parametry danej sekwencji
możemy sobie nasze sekwencje
w postgresie one są trzymane w takiej tabeli pg sequences i
możemy zobaczyć naszą sekwencję i wartość która nas interesuje
to jest start value no właśnie jest ona 1 bo to
jest domyślna wartość początkowa natomiast nasza
tabela hero id ma już 5 więc następną
wartością którą byśmy tutaj chcieli zobaczyć to jest 6 aby
zmodyfikować wartość początkową sekwencji używamy polecenia dml
alter sequence podając jej nazwę i podajemy komendę
restart with i wartość którą chcemy uzyskać
następną czyli 6 w
tym momencie jeżeli będziemy chcieli dodać nowy
rekord uda się to bez problemu i my będziemy mogli
sprawdzić że odświeżymy
sobie to nowy rekord dodał się proszę z
identyfikatorem 6 nie musieliśmy nic podawać wszystko się samo
i automatycznie zwiększyło warto w tym momencie powiedzieć
że takie wartości są inkrementowane cały czas to znaczy że
jeżeli byśmy usunęli na przykład jana błyska to
powstanie tutaj dziura bo wartość cztery zniknie ale nie
przejmujmy się tym w ogóle bo interesuje nas to żeby te
wartości były unikalne i każda następna
była większa ponieważ one mają unikalnie
identyfikować nasze wiersze to że nie będą po kolei nie jest
tak naprawdę istotne w
ramach zadań do przepracowania tym razem chciałbym żebyś
wykorzystał plik dany do lekcji drugiej rozdziału 2 pod zadanie
i zamieszczone tam zapytania insert tak żebyś
mógł dopisać kilka nowych postaci do tabeli heroes jak te nowe postaci
się pojawią spróbuj zmodyfikować tak sekwencję przypisaną do kolumny
hero id żeby udało się dodać jeszcze jednego albo może
nawet i więcej bohaterów jeżeli użyjesz nie zmodyfikowanych zapytań insert
z podanego pliku to efekt będzie taki że
jeżeli byś chciał dopisać nową postać bez
modyfikacji sekwencji powinieneś dostać błąd no więc
powodzenia jakbyś miał już gotowe rozwiązanie albo
zatkałbyś się totalnie to omówienie rozwiązania znajdziesz
już w następnej lekcji
Operacje na sekwencjach · 1 min
-- Przywrócenie oryginalnych wartości w kolumnie 'hero_id'
UPDATE heroes SET hero_id = hero_id - 10;
-- Zmiana kolumny 'hero_id' na autoinkrementującą
ALTER TABLE heroes ALTER COLUMN hero_id ADD GENERATED BY DEFAULT AS IDENTITY;
-- Próba dodania nowego rekordu
-- Z powodu nie ustawionej sekwencji, jest konflikt przy próbie przypisania nowego hero_id
INSERT INTO heroes VALUES ('Mika', 'Kleefan', 'M', 'człowiek', 20, 25, 220, 250);
-- Wyświetlenie atrybutów sekwencji (PostgreSQL)
SELECT * FROM pg_sequences;
-- Przestawienie startu wartości generowanych przez sekwencję na 6 (pierwsza wolna w naszym zestawie danych)
ALTER SEQUENCE heroes_hero_id_seq RESTART WITH 6;
-- Udane dodanie nowego rekordu
INSERT INTO heroes VALUES ('Mika', 'Kleefan', 'M', 'człowiek', 20, 25, 220, 250);
-- Wyświetlenie wszystkich rekordów (w tym nowo dodanego z automatycznie wygenerowanym hero_id)
SELECT * FROM heroes;