Przejdź do treści

SQLite: podstawy i różnice względem MySQL

Praktyczny kurs SQLite - bazy danych, która siedzi w każdej aplikacji mobilnej (Android, iOS). Piszesz prawdziwe zapytania w przeglądarce, a przy okazji poznajesz różnice między SQLite a MySQL i PostgreSQL: typy, klucze, daty i pułapki dialektów. Idealny dla technikum programistycznego (INF.04).

Pierwsze zapytania: SELECT

SQLite to najpopularniejsza baza świata - plikowa, bez serwera, wbudowana w każdy telefon. Podstawowy SELECT wygląda identycznie jak w MySQL. Umowa w tym kursie: nazwy kolumn piszemy małymi literami, dokładnie tak jak w tabeli.

Warunki i funkcje

LIKE, IN, BETWEEN i funkcje tekstowe działają jak w MySQL. Drobna różnica: w SQLite LIKE nie zwraca uwagi na wielkość liter tylko dla liter ASCII (bez polskich znaków).

Zliczanie i grupowanie

count, sum, avg, min, max oraz GROUP BY i HAVING - identycznie jak w MySQL. Pamiętaj: kolumnom z funkcji zawsze nadajemy nazwę przez AS (w zadaniach podajemy, jaką).

Łączenie tabel: JOIN

JOIN i LEFT JOIN działają jak w MySQL. Ciekawostka dialektu: RIGHT i FULL JOIN pojawiły się w SQLite dopiero w wersji 3.39 (2022) - w starszych aplikacjach ich nie ma, ale LEFT JOIN zawsze wystarczy (wystarczy zamienić tabele miejscami).

Zmiana danych: INSERT, UPDATE, DELETE

Modyfikacja danych wygląda jak w MySQL - z jednym wyjątkiem: "wstaw albo zaktualizuj" to w SQLite (i PostgreSQL) ON CONFLICT, a w MySQL ON DUPLICATE KEY UPDATE. W zadaniach po zmianie danych uruchamiasz podane zapytanie kontrolne - to jego wynik jest sprawdzany.

Tabele i typy: największa różnica

Tu SQLite naprawdę różni się od MySQL: typy są "elastyczne" (type affinity), autonumeracja to INTEGER PRIMARY KEY (nie AUTO_INCREMENT ani SERIAL), a typu DATE... nie ma wcale. W zadaniach z CREATE TABLE typy pisz WIELKIMI literami: INTEGER, TEXT, REAL.

Klucze obce i więzy

Klasyczna pułapka: SQLite domyślnie IGNORUJE klucze obce - trzeba je włączyć poleceniem PRAGMA foreign_keys = ON (osobno dla każdego połączenia!). W tym kursie są już włączone. MySQL (InnoDB) i PostgreSQL pilnują ich zawsze.

SQLite w praktyce + ściągawka różnic

Gdzie spotkasz SQLite: aplikacje na Androida i iOS, przeglądarki, komunikatory - wszędzie tam baza to po prostu plik. Ściągawka różnic: - autonumeracja: SQLite = INTEGER PRIMARY KEY, MySQL = AUTO_INCREMENT, PostgreSQL = SERIAL - typy: SQLite elastyczne (type affinity), MySQL/PostgreSQL ścisłe - daty: SQLite = TEXT + strftime/date, MySQL = DATE/DATETIME + DATE_FORMAT - upsert: SQLite/PostgreSQL = ON CONFLICT, MySQL = ON DUPLICATE KEY UPDATE - klucze obce: SQLite wymaga PRAGMA foreign_keys = ON, reszta pilnuje zawsze - serwer: MySQL/PostgreSQL to osobny serwer z użytkownikami, SQLite to plik bez haseł