Dokumentacja SQLite
Zwięzła dokumentacja SQLite oparta na przykładach. Przeczytaj o zagadnieniu, zobacz kod i przećwicz go na ścieżce Coddy.
Zacznij ścieżkę SQLite z przewodnikiemGetting Started
- Czym jest SQLiteSQLite to bezserwerowa, plikowa baza danych SQL, która działa wewnątrz twojej aplikacji. Zobacz, czym dokładnie jest, czym różni się od serwera baz danych i kiedy sprawdza się najlepiej.
- Lista poleceń SQLPolecenia SQL, których używasz na co dzień, pogrupowane według zadań (DDL, DML, DQL i TCL), każde z przykładem do uruchomienia w SQLite.
- SQLite vs MySQLCzym naprawdę różnią się SQLite i MySQL: architekturą, współbieżnością, typami i rodzajem projektów, do których każda z nich została stworzona.
- SQLite vs PostgresCzym naprawdę różnią się SQLite i PostgreSQL: architekturą, współbieżnością, typami i rodzajem projektów, do których każda z nich pasuje najlepiej.
- Kiedy używać SQLitePraktyczny przewodnik: kiedy SQLite to właściwa baza danych, a kiedy lepiej sięgnąć po Postgresa albo MySQL.
- Instalacja SQLiteJak zainstalować SQLite na Windows, macOS i Linuksie: pobranie narzędzia wiersza poleceń, dodanie go do PATH i sprawdzenie, czy wszystko działa.
- SQLite CLIJak używać powłoki sqlite3 w wierszu poleceń: otwieranie baz, uruchamianie zapytań, polecenia z kropką oraz import i eksport danych bez wychodzenia z terminala.
- Narzędzia GUIPraktyczny przegląd narzędzi graficznych do otwierania, przeglądania i edycji plików baz SQLite: DB Browser for SQLite, SQLiteStudio i przeglądarki online.
- Tworzenie bazyJak utworzyć bazę danych SQLite: model oparty na pliku, polecenie `sqlite3` i dlaczego nie istnieje instrukcja `CREATE DATABASE`.
- Baza w pamięciJak działa baza danych w pamięci w SQLite, kiedy sięgać po `:memory:` i czym różni się od bazy w pliku, którą możesz zachować.
Tables & Types
- CREATE TABLEJak tworzyć tabele w SQLite: definicje kolumn, ograniczenia, IF NOT EXISTS, tabele tymczasowe i CREATE TABLE AS SELECT.
- Typy danychJak SQLite przechowuje wartości: pięć klas przechowywania, dlaczego typowanie jest dynamiczne i pułapki, na które wpadają osoby przychodzące z Postgres lub MySQL.
- Type affinityJak działa system type affinity w SQLite: pięć rodzajów affinity, reguły wyboru na podstawie deklaracji kolumny i powód, dla którego kolumna INTEGER może przechowywać tekst.
- Tabele STRICTJak tabele STRICT w SQLite wyłączają elastyczne przechowywanie typów, odrzucają niepasujące wartości i dają sprawdzanie typów, którego pewnie od początku się spodziewasz.
- Klucze główneJak działają klucze główne w SQLite: wyjątkowy INTEGER PRIMARY KEY, klucze złożone, AUTOINCREMENT i dziwactwa, które zaskakują początkujących.
- ROWIDCzym naprawdę jest ROWID w SQLite, kiedy INTEGER PRIMARY KEY zamienia go w twoją kolumnę i po co istnieją tabele WITHOUT ROWID.
- NOT NULL i wartości domyślneJak działają NOT NULL i DEFAULT w SQLite: co naprawdę wymuszają, sztuczka z CURRENT_TIMESTAMP i pułapki przy dodawaniu ich do istniejących tabel.
- Ograniczenia CHECKJak używać ograniczeń CHECK w SQLite, aby wymuszać reguły dla wartości w kolumnach: sprawdzenia jednej kolumny, kilku kolumn, nazwane ograniczenia i pułapki.
- Ograniczenia UNIQUEJak działają ograniczenia UNIQUE w SQLite: na poziomie kolumny i tabeli, klucze złożone, osobliwość z NULL i co zrobić, gdy ograniczenie zostanie naruszone.
- DROP i ALTER TABLEJak usuwać tabele, zmieniać ich nazwy i modyfikować je w SQLite: co obsługuje ALTER TABLE, czego nie obsługuje i jak przebudować tabelę, gdy ALTER nie wystarcza.
Inserting & Modifying Data
- INSERTJak działa INSERT w SQLite: pojedyncze wiersze, wstawianie wielu wierszy, INSERT...SELECT, wartości domyślne i modyfikatory konfliktów OR IGNORE / OR REPLACE.
- Instrukcja UPDATE w SQLJak zmieniać istniejące wiersze w SQLite: składnia UPDATE, klauzula WHERE, która chroni przed wpadkami, aktualizacja wielu kolumn i UPDATE ... FROM do zmian między tabelami.
- DELETEJak działa DELETE w SQLite: pisanie bezpiecznej klauzuli WHERE, usuwanie wszystkich wierszy, kaskadowe usuwanie w powiązanych tabelach i odczyt usuniętych wierszy przez RETURNING.
- UPSERTJak działa UPSERT w SQLite: klauzula ON CONFLICT, tabela excluded, DO NOTHING vs DO UPDATE i czym to się różni od INSERT OR REPLACE.
- Klauzula RETURNINGJak działa klauzula RETURNING w SQLite: pobierasz wiersze, których właśnie dotknęło INSERT, UPDATE lub DELETE, bez drugiego zapytania.
- Import CSVJak zaimportować pliki CSV do SQLite poleceniem .import: nagłówki, istniejące tabele, własne separatory i najczęstsze błędy.
- Eksport danychJak wyeksportować dane z SQLite: CSV z nagłówkami, JSON, pełne zrzuty SQL i kopie pojedynczych tabel w powłoce wiersza poleceń sqlite3.
Querying Data
- Podstawy SELECTJak działa instrukcja SELECT w SQLite: wybór kolumn, obliczanie wyrażeń, aliasy w wynikach i model myślowy stojący za każdym zapytaniem, jakie kiedykolwiek napiszesz.
- Klauzula WHEREJak klauzula WHERE filtruje wiersze w SQLite: operatory porównania, AND/OR, LIKE, IN, BETWEEN i pułapka z NULL, na którą łapie się każdy.
- Operatory i NULLJak operatory SQLite działają z NULL: dlaczego `=` i `<>` nie zachowują się tak, jak można by się spodziewać, i jakie narzędzia (IS, IS NOT, COALESCE, IFNULL) robią to dobrze.
- ORDER BYJak działa ORDER BY w SQLite: sortowanie rosnące i malejące, rozstrzyganie remisów kolejnymi kolumnami, obsługa NULL i sortowanie bez rozróżniania wielkości liter.
- LIMIT i OFFSETJak działają LIMIT i OFFSET w SQLite: ograniczanie liczby wierszy, pomijanie wierszy, bezpieczna paginacja i pułapka wydajności w dużych tabelach.
- DISTINCTJak działa SELECT DISTINCT w SQLite: jedna kolumna, kilka kolumn, obsługa NULL, COUNT(DISTINCT) i kiedy lepszym narzędziem jest GROUP BY.
- Instrukcja CASE w SQLJak działa CASE w SQLite: forma prosta i forma z warunkami, użycie w SELECT, ORDER BY i WHERE oraz kiedy lepiej sięgnąć po IIF.
Functions & Aggregates
- Funkcje tekstowePraktyczne funkcje tekstowe w SQLite: łączenie przez ||, SUBSTR, INSTR, REPLACE, TRIM oraz wzorce do czyszczenia i przekształcania tekstu w zapytaniach.
- Funkcje liczboweJak liczyć w SQLite: ROUND, ABS, CEIL, FLOOR, MOD, POWER, SQRT, RANDOM i pułapka dzielenia całkowitego, na którą każdy kiedyś trafia.
- Data i czasJak SQLite przechowuje daty i na nich operuje: pięć funkcji dat, ciągi formatujące, modyfikatory i wybory dotyczące zapisu, dzięki którym zapytania pozostają szybkie.
- Funkcje agregujące SQLJak funkcje agregujące w SQLite zamieniają wiele wierszy w jedną wartość: COUNT, SUM, AVG, MIN, MAX i GROUP_CONCAT, do tego DISTINCT, FILTER i zasady dotyczące NULL.
- GROUP BY i HAVINGJak GROUP BY zwija wiersze w grupy w SQLite i jak HAVING filtruje te grupy po agregacji, z konkretnym wyjaśnieniem różnicy między WHERE a HAVING.
Relationships & Joins
- Klucze obceJak działają klucze obce w SQLite: deklarowanie REFERENCES, włączanie wymuszania przez PRAGMA i wybór właściwego zachowania ON DELETE.
- INNER JOINJak działa INNER JOIN w SQLite: model myślowy, klauzula ON, złączenie trzech tabel i skrót USING.
- LEFT JOINJak działa LEFT JOIN w SQLite: zachowywanie niedopasowanych wierszy, czytanie wartości NULL, bezpieczne filtrowanie i łączenie więcej niż dwóch tabel.
- Self joinJak działa self join w SQLite: łączenie w pary wierszy z tej samej tabeli za pomocą aliasów, z przykładami pracownik i kierownik oraz danych hierarchicznych.
- PodzapytaniaJak zagnieździć jeden SELECT w drugim w SQLite: podzapytania skalarne, IN/EXISTS, tabele pochodne, podzapytania skorelowane i sytuacje, w których JOIN czyta się lepiej.
- CTEJak działają Common Table Expressions w SQLite: WITH do nazywania podzapytań, łączenie kilku CTE i zapytania, które czyta się od góry do dołu.
- Rekurencyjne CTEJak działają rekurencyjne CTE w SQLite: układ zapytania startowego i rekurencyjnego, przechodzenie drzew rodzic-dziecko, generowanie serii i unikanie nieskończonych pętli.
Indexes & Performance
- IndeksyJak działają indeksy w SQLite, kiedy pomagają, kiedy szkodzą i jak sprawdzić, czy planer faktycznie z nich korzysta.
- Indeksy złożoneJak działają indeksy wielokolumnowe w SQLite, dlaczego kolejność kolumn ma znaczenie i kiedy indeks złożony pomaga, a kiedy tylko marnuje miejsce.
- Indeksy częścioweJak działają indeksy częściowe w SQLite: indeksujesz tylko te wiersze, o które naprawdę pytasz, a wzorce takie jak miękkie usuwanie, częściowa unikalność i gorące podzbiory sprawiają, że to się opłaca.
- EXPLAIN QUERY PLANJak używać EXPLAIN QUERY PLAN w SQLite, żeby sprawdzić, czy zapytanie korzysta z indeksu, co znaczą SCAN i SEARCH oraz jak czytać plany złączeń.
- ANALYZE i VACUUMJak `ANALYZE` i `VACUUM` utrzymują bazę SQLite szybką i zwartą: co naprawdę robi każde z nich, kiedy je uruchamiać i jakie warianty warto znać.
Advanced Features
- TransakcjeJak działają transakcje w SQLite: BEGIN, COMMIT, ROLLBACK, tryb autocommit oraz tryby DEFERRED/IMMEDIATE/EXCLUSIVE, które decydują, kiedy zakładane są blokady.
- SavepointyJak działają savepointy w SQLite: nazwane znaczniki wewnątrz transakcji, do których możesz się wycofać bez wyrzucania całej transakcji.
- Widoki (views)Jak działają widoki w SQLite: zapisywanie zapytań jako wirtualnych tabel, kiedy używać widoków tymczasowych i dlaczego widoki w SQLite są domyślnie tylko do odczytu.
- Wyzwalacze (triggery)Jak działają wyzwalacze w SQLite: BEFORE i AFTER, INSTEAD OF na widokach, odwołania do wierszy OLD i NEW oraz sytuacje, w których trigger to właściwe narzędzie.
- Obsługa JSONJak SQLite przechowuje i odpytuje JSON: wyciąganie pól, aktualizacja wartości, rozwijanie tablic przez json_each i indeksowanie ścieżek JSON dla szybkości.
- Wyszukiwanie pełnotekstoweJak dodać wyszukiwanie pełnotekstowe do SQLite z FTS5: tabele wirtualne, operator MATCH, ranking BM25 i synchronizacja indeksu z danymi.
- Funkcje oknaJak działają funkcje okna (window functions) w SQLite: OVER, PARTITION BY, funkcje rankingowe, LAG/LEAD i ramki do sum narastających.
- Kolumny generowaneJak działają kolumny generowane w SQLite: deklarowanie, wybór między VIRTUAL a STORED i indeksowanie ich dla szybkiego wyszukiwania.
- ATTACH DATABASEJak ATTACH DATABASE pozwala otworzyć kilka plików SQLite w jednym połączeniu, wykonywać zapytania na nich wszystkich z prefiksami schematów i odłączyć je, gdy skończysz.
Safety & Application Integration
- Prepared statementsCzym są prepared statements w SQLite, po co istnieją i jak wygląda cykl prepare/bind/step/finalize, który opakowuje każdy sterownik.
- Wiązanie parametrówJak działa wiązanie parametrów w SQLite: symbole zastępcze według pozycji, parametry nazwane i zasady bezpiecznego przekazywania wartości z aplikacji.
- SQL injectionDlaczego sklejanie tekstów jest niebezpieczne, jak naprawdę działa SQL injection i jak zapytania parametryzowane w SQLite raz na zawsze to blokują.
- Połączenia z aplikacjiJak aplikacje otwierają bazę SQLite i z niej korzystają: connection stringi, ścieżki plików, sterowniki w różnych językach i ustawienia, które warto dobrze dobrać od pierwszego dnia.
- MigracjeJak bezpiecznie rozwijać schemat SQLite w czasie za pomocą PRAGMA user_version, uporządkowanych skryptów migracji i transakcji, dzięki którym zmiany da się cofnąć.
- WAL i współbieżnośćJak write-ahead logging zmienia współbieżność w SQLite: czytelnicy i piszący przestają się blokować, a pliki -wal i -shm mają konkretne zadania.
Production & Operations
- Kopia zapasowa i przywracanieJak bezpiecznie zrobić kopię zapasową bazy SQLite i ją przywrócić: polecenie .backup, VACUUM INTO, Online Backup API i dlaczego kopiowanie pliku to zły pomysł.
- Ustawienia PRAGMAInstrukcje PRAGMA, które naprawdę mają znaczenie: journal_mode, synchronous, foreign_keys, busy_timeout i cache_size, oraz wartości, których warto używać na produkcji.
- Typowe błędyBłędy SQLite, które naprawdę spotkasz na produkcji (database is locked, readonly database, disk image malformed, naruszenia ograniczeń) i sposoby ich naprawy.