Ta lekcja jest w bazie eduweb
Zaloguj się kontem z dostępem albo wykup dostęp do bazy, żeby obejrzeć wideo.
Lekcja 26/ 33Operacje na transakcjach
Nowe odkrycia nie muszą być koniecznie domeną... geografów. Obecnie można odkrywać również nowe, niesamowite zależności i prawdy, badając i analizując informacje zgromadzone w bazach danych. To właśnie język SQL służy do operowania danymi. Dzięki temu Kursowi dowiesz się jakie możliwości są w Twoich rękach - od tworzenia struktur baz danych, przez zapisywanie w nich informacji, wreszcie po sposoby pobierania i przetwarzania danych. Przekonaj się, jak użycie języka SQL może wspomóc działanie aplikacji, zasilić systemy analizy danych, czy umożliwić badania naukowe - na przykład... wpływu kursów internetowych na poprawę atrakcyjności rynkowej pracowników.
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.
Interakcje transakcji - tryb read committed - użytkownik postgres - część 1 · 3 min
-- umożliwiamy modyfikowanie tabeli equipment drugiemu użytkownikowi
GRANT ALL ON TABLE equipment TO other;
-- rozpoczynamy transakcję
BEGIN;
-- ustawiamy bazowy poziom izolacji (read commited)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- upewniamy się jaki jest stan danych (rekordy z niepustą wartością obrony)
SELECT * FROM equipment WHERE armor IS NOT NULL;
-- odpalamy aktualizację rekordów, które mają niedużą wartość obrony.
-- Wartość zmiany obrony zależna jest od WSZYSTKICH rekordów z niepustą obroną
UPDATE equipment SET armor = armor + (SELECT AVG(armor)/2 FROM equipment WHERE armor IS NOT NULL)
WHERE armor < 20;Interakcje transakcji - tryb read committed - użytkownik other - część 1 · 4 min
-- rozpoczynamy transakcję
BEGIN;
-- ustawiamy bazowy poziom izolacji (read commited)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- upewniamy się jaki jest stan danych (rekordy z niepustą wartością obrony)
SELECT * FROM equipment WHERE armor IS NOT NULL;
-- odpalamy aktualizację rekordów, które mają dużą wartość obrony
-- w tym momencie baza będzie czekała na zakończenie pierwszej transakcji (użytkownika postgres),
-- która modyfikuje te same rekordy co poniższe zapytanie
UPDATE equipment SET armor = armor + 3 WHERE armor > 20;Interakcje transakcji - tryb read committed - użytkownik postgres - część 2 · 5 min
-- umożliwiamy modyfikowanie tabeli equipment drugiemu użytkownikowi
-- GRANT ALL ON TABLE equipment TO other;
-- rozpoczynamy transakcję
-- BEGIN;
-- ustawiamy bazowy poziom izolacji (read commited)
-- SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- upewniamy się jaki jest stan danych (rekordy z niepustą wartością obrony)
-- SELECT * FROM equipment WHERE armor IS NOT NULL;
-- odpalamy aktualizację rekordów, które mają niedużą wartość obrony.
-- Wartość zmiany obrony zależna jest od WSZYSTKICH rekordów z niepustą obroną
-- UPDATE equipment SET armor = armor + (SELECT AVG(armor)/2 FROM equipment WHERE armor IS NOT NULL)
-- WHERE armor < 20;
-- w tej samej transakcji (z części pierwszej) sprawdzamy zmiany wprowadzone przez UPDATE
SELECT * FROM equipment WHERE armor IS NOT NULL;
-- i zatwierdzamy transakcję (odblokowywując tym samym transakcję użytkownika other)
-- transakcja użytkownika other widzi już zmiany wprowadzone przez UPDATE z obecnej transakcji
COMMIT;Interakcje transakcji - tryb read committed - użytkownik other - część 2 · 6 min
-- rozpoczynamy transakcję
-- BEGIN;
-- ustawiamy bazowy poziom izolacji (read commited)
-- SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- upewniamy się jaki jest stan danych (rekordy z niepustą wartością obrony)
-- SELECT * FROM equipment WHERE armor IS NOT NULL;
-- odpalamy aktualizację rekordów, które mają dużą wartość obrony
-- w tym momencie baza będzie czekała na zakończenie pierwszej transakcji (użytkownika postgres),
-- która modyfikuje te same rekordy co poniższe zapytanie
-- UPDATE equipment SET armor = armor + 3 WHERE armor > 20;
-- w tej samej transakcji (z części pierwszej) weryfikujemy zmiany wprowadzone przez UPDATE
-- (zmiany z transakcji użytkownika postgres są też tutaj widoczne)
SELECT * FROM equipment WHERE armor IS NOT NULL;
-- cofamy zmiany wprowadzone przez tą transakcję
ROLLBACK;
-- teraz widoczne są tylko zmiany z transakcji użytkownika postgres
SELECT * FROM equipment WHERE armor IS NOT NULL;Interakcje transakcji - tryb repeatable read - użytkownik postgres - część 1 · 7 min
BEGIN;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- wprowadzamy małą poprawkę do wartości obrony
UPDATE equipment SET armor = armor - 3 WHERE armor IS NOT NULL;
-- sprawdzamy jak się ta zmiana zaaplikowała
SELECT * FROM equipment WHERE armor IS NOT NULL;Interakcje transakcji - tryb repeatable read - użytkownik other · 7 min
BEGIN;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- wprowadzamy małą poprawkę do wartości obrony
-- ale tutaj transakcja zatrzyma się, czekając na zakończenie się transakcji użytkownika postgres
UPDATE equipment SET armor = armor - 5 WHERE armor IS NOT NULL;
--po zakończeniu się transakcji użytkownika postgres tutaj nastąpi błąd (serializacji)Interakcje transakcji - tryb serializable - użytkownik postgres - część 1 · 12 min
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- wstawiamy nowy rekord z wartością obrony zależną od modyfikacji w równoległej transakcji użytkownika other
-- średnia z wartości obrony dla bohaterów z hero_id > 4
-- (a w równoległej transakcji wstawiamy rekord powiązany z hero_id = 5)
INSERT INTO equipment (equipment_name, equipment_type, damage, amount, hero_id)
SELECT 'topór', 'broń', CAST(AVG(damage) AS integer), 1, 2 FROM equipment WHERE hero_id > 4;
-- sprawdzamy jaka wartość została wyliczona
SELECT * FROM equipment WHERE damage IS NOT NULL;Interakcje transakcji - tryb serializable - użytkownik other - część 1 · 13 min
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- wstawiamy nowy rekord z wartością obrony zależną od modyfikacji w równoległej transakcji użytkownika postgres
-- średnia z wartości obrony dla bohaterów z hero_id <= 4
-- (a w równoległej transakcji wstawiamy rekord powiązany z hero_id = 2)
INSERT INTO equipment (equipment_name, equipment_type, damage, amount, hero_id)
SELECT 'łuk', 'broń', CAST(AVG(damage) AS integer), 1, 5 FROM equipment WHERE hero_id <= 4;
-- sprawdzamy jaka wartość została wyliczona
SELECT * FROM equipment WHERE damage IS NOT NULL;9 rozdziałów33 lekcje4h 8min
Dostęp do wszystkich kursów z bazy eduweb za 199 zł/mies.
Web Application Developer, Administrator baz danych, Administrator, oraz Project Manager w rozmaitych projektów IT o platform HR aż po systemy telematic.
Szczególnie interesują go relacyjne bazy danych i zagadnienia związane z ich projektowaniem i programowaniem, a także administracją usług z wykorzystaniem PostgreSQL.
Specjalizacje: Web application development, Database application development, database administration, Python, JavaScript, C++, Linux system administration.