Documentazione SQLite
Guida di riferimento a SQLite concisa e ricca di esempi. Leggi il concetto, guarda il codice e poi mettilo in pratica in un percorso Coddy.
Inizia un percorso guidato di SQLiteGetting Started
- Cos'è SQLiteSQLite è un database SQL serverless basato su file che gira dentro la tua applicazione. Ecco cos'è davvero, in cosa differisce da un database server e quando dà il meglio.
- Elenco comandi SQLI comandi SQL che usi ogni giorno, raggruppati in base a cosa fanno (DDL, DML, DQL e TCL), ognuno con un esempio che puoi eseguire in SQLite.
- SQLite vs MySQLIn cosa differiscono davvero SQLite e MySQL: architettura, concorrenza, tipi di dati e i tipi di progetto per cui ciascuno è pensato.
- SQLite vs PostgresIn cosa differiscono davvero SQLite e PostgreSQL: architettura, concorrenza, tipi di dati e i tipi di progetto a cui ciascuno si adatta meglio.
- Quando usare SQLiteGuida pratica per capire quando SQLite è il database giusto e quando invece conviene scegliere Postgres o MySQL.
- Installare SQLiteCome installare SQLite su Windows, macOS e Linux: ottenere lo strumento da riga di comando, aggiungerlo al PATH e verificare che tutto funzioni.
- SQLite CLICome usare la shell a riga di comando sqlite3: aprire database, eseguire query, usare i comandi punto e importare o esportare dati senza uscire dal terminale.
- Strumenti graficiUna panoramica pratica degli strumenti grafici per aprire, esplorare e modificare i file di database SQLite: DB Browser for SQLite, SQLiteStudio e i viewer online.
- Creare un databaseCome creare un database SQLite: il modello basato su file, il comando `sqlite3` e perché non esiste un'istruzione `CREATE DATABASE`.
- Database in memoriaCome funziona il database in memoria di SQLite, quando conviene usare `:memory:` e in cosa differisce da un database su file che puoi conservare.
Tables & Types
- CREATE TABLECome creare tabelle in SQLite: definizioni delle colonne, vincoli, IF NOT EXISTS, tabelle temporanee e CREATE TABLE AS SELECT.
- Tipi di datiCome SQLite salva i valori: le cinque classi di archiviazione, perché la tipizzazione è dinamica e le insidie che sorprendono chi arriva da Postgres o MySQL.
- Type affinityCome funziona il sistema di type affinity di SQLite: le cinque affinità, le regole che ne scelgono una dalla dichiarazione della colonna e perché una colonna INTEGER può contenere una stringa.
- Tabelle STRICTCome le tabelle STRICT di SQLite disattivano l'archiviazione con tipi flessibili, rifiutano i valori del tipo sbagliato e ti danno il controllo dei tipi che probabilmente ti aspettavi fin dall'inizio.
- Chiavi primarieCome funzionano le chiavi primarie in SQLite: lo speciale INTEGER PRIMARY KEY, le chiavi composte, AUTOINCREMENT e le stranezze che sorprendono chi inizia.
- ROWIDCos'è davvero il ROWID in SQLite, quando INTEGER PRIMARY KEY lo trasforma nella tua colonna e perché esistono le tabelle WITHOUT ROWID.
- NOT NULL e DEFAULTCome funzionano NOT NULL e DEFAULT in SQLite: cosa fanno rispettare davvero, il trucco di CURRENT_TIMESTAMP e le insidie quando li aggiungi a tabelle esistenti.
- Vincoli CHECKCome usare i vincoli CHECK in SQLite per imporre regole sui valori delle colonne: controlli su una colonna, su più colonne, vincoli con nome e le insidie da conoscere.
- Vincoli UNIQUECome funzionano i vincoli UNIQUE in SQLite: a livello di colonna e di tabella, chiavi composte, la stranezza dei NULL e cosa fare quando uno fallisce.
- DROP e ALTER TABLECome eliminare, rinominare e modificare tabelle in SQLite: cosa supporta ALTER TABLE, cosa non supporta e il trucco della ricostruzione per le modifiche che non può fare.
Inserting & Modifying Data
- INSERTCome funziona INSERT in SQLite: righe singole, inserimenti multipli, INSERT...SELECT, valori predefiniti e i modificatori di conflitto OR IGNORE / OR REPLACE.
- Istruzione UPDATE SQLCome modificare le righe esistenti in SQLite: la sintassi di UPDATE, la clausola WHERE che ti protegge, gli aggiornamenti su più colonne e UPDATE ... FROM per le modifiche tra tabelle.
- DELETECome funziona DELETE in SQLite: scrivere una clausola WHERE sicura, eliminare tutte le righe, propagare l'eliminazione alle tabelle collegate e riottenere le righe eliminate con RETURNING.
- UPSERTCome funziona l'UPSERT in SQLite: la clausola ON CONFLICT, la tabella excluded, DO NOTHING vs DO UPDATE e in cosa differisce da INSERT OR REPLACE.
- Clausola RETURNINGCome funziona la clausola RETURNING in SQLite: ottenere le righe appena toccate da INSERT, UPDATE o DELETE senza una seconda query.
- Importare CSVCome importare file CSV in SQLite con il comando .import: gestire le intestazioni, le tabelle esistenti, i separatori personalizzati e gli errori più comuni.
- Esportare datiCome esportare dati da SQLite: CSV con intestazioni, JSON, dump SQL completi e backup di singole tabelle con la shell sqlite3.
Querying Data
- Basi di SELECTCome funziona l'istruzione SELECT in SQLite: scegliere le colonne, calcolare espressioni, dare alias ai risultati e il modello mentale dietro ogni query che scriverai.
- Clausola WHERECome la clausola WHERE filtra le righe in SQLite: operatori di confronto, AND/OR, LIKE, IN, BETWEEN e la trappola dei NULL in cui cadono tutti.
- Operatori e NULLCome si comportano gli operatori di SQLite con NULL: perché `=` e `<>` non funzionano come ti aspetti, e quando usare IS NULL, IS NOT NULL, COALESCE e IFNULL.
- ORDER BYCome funziona ORDER BY in SQLite: ordinamento crescente e decrescente, spareggi con più colonne, gestione dei NULL e ordinamento senza distinzione tra maiuscole e minuscole.
- LIMIT e OFFSETCome funzionano LIMIT e OFFSET in SQLite: limitare le righe, saltarne alcune, paginare in sicurezza ed evitare la trappola delle prestazioni sulle tabelle grandi.
- DISTINCTCome funziona SELECT DISTINCT in SQLite: su una colonna, su più colonne, la gestione dei NULL, COUNT(DISTINCT) e quando GROUP BY è lo strumento migliore.
- CASE in SQLCome funziona CASE in SQLite: forma semplice e forma con condizioni, uso in SELECT, ORDER BY e WHERE, e quando conviene usare IIF.
Functions & Aggregates
- Funzioni stringaLe funzioni stringa di SQLite nella pratica: concatenazione con ||, SUBSTR, INSTR, REPLACE, TRIM e gli schemi per pulire e trasformare il testo nelle query.
- Funzioni numericheCome fare calcoli in SQLite: ROUND, ABS, CEIL, FLOOR, MOD, POWER, SQRT, RANDOM e la trappola della divisione intera in cui tutti cadono almeno una volta.
- Date e orariCome SQLite salva e manipola le date: le cinque funzioni per le date, le stringhe di formato, i modificatori e le scelte di archiviazione che mantengono veloci le query.
- Funzioni di aggregazione SQLCome le funzioni di aggregazione di SQLite riducono molte righe a un solo valore: COUNT, SUM, AVG, MIN, MAX e GROUP_CONCAT, con DISTINCT, FILTER e le regole sui NULL.
- GROUP BY e HAVINGCome GROUP BY raggruppa le righe in SQLite e come HAVING filtra quei gruppi dopo l'aggregazione, con la differenza tra WHERE e HAVING resa concreta.
Relationships & Joins
- Chiavi esterneCome funzionano le chiavi esterne in SQLite: dichiarare REFERENCES, attivare il controllo con PRAGMA e scegliere il comportamento ON DELETE giusto.
- INNER JOINCome funziona INNER JOIN in SQLite: il modello mentale, la clausola ON, la join di tre tabelle e la scorciatoia USING.
- LEFT JOINCome funziona LEFT JOIN in SQLite: tenere le righe senza corrispondenza, leggere i NULL, filtrare in sicurezza e unire più di due tabelle.
- Self joinCome funziona un self join in SQLite: abbinare righe della stessa tabella usando gli alias, con esempi su dipendenti e responsabili e su dati gerarchici.
- SubqueryCome annidare una SELECT dentro un'altra in SQLite: subquery scalari, IN/EXISTS, tabelle derivate, subquery correlate e quando una JOIN si legge meglio.
- CTECome funzionano le Common Table Expression in SQLite: usare WITH per dare un nome alle subquery, concatenare più CTE e scrivere query che si leggono dall'alto verso il basso.
- CTE ricorsiveCome funzionano le CTE ricorsive in SQLite: la struttura con ancora e parte ricorsiva, la visita di alberi padre-figlio, la generazione di serie e come evitare i cicli infiniti.
Indexes & Performance
- IndiciCome funzionano gli indici in SQLite, quando aiutano, quando peggiorano le cose e come capire se il planner li sta usando davvero.
- Indici compositiCome funzionano gli indici su più colonne in SQLite, perché l'ordine delle colonne conta e quando un indice composito aiuta e quando spreca solo spazio.
- Indici parzialiCome funzionano gli indici parziali in SQLite: indicizzare solo le righe che interroghi davvero, e i casi (soft delete, unicità parziale, sottoinsiemi caldi) in cui rendono di più.
- EXPLAIN QUERY PLANCome usare EXPLAIN QUERY PLAN in SQLite per capire se la tua query usa un indice, cosa significano SCAN e SEARCH e come leggere i piani delle join.
- VACUUM e ANALYZECome `ANALYZE` e `VACUUM` mantengono un database SQLite veloce e compatto: cosa fa davvero ciascuno, quando eseguirli e le varianti che vale la pena conoscere.
Advanced Features
- TransazioniCome funzionano le transazioni in SQLite: BEGIN, COMMIT, ROLLBACK, autocommit e le modalità DEFERRED/IMMEDIATE/EXCLUSIVE che decidono quando vengono presi i lock.
- SavepointCome funzionano i savepoint in SQLite: segnaposto con nome dentro una transazione a cui puoi tornare indietro senza buttare via tutto.
- VisteCome funzionano le viste in SQLite: salvare query come tabelle virtuali, quando usare le viste temporanee e perché le viste di SQLite sono in sola lettura per impostazione predefinita.
- TriggerCome funzionano i trigger in SQLite: BEFORE e AFTER, INSTEAD OF sulle viste, i riferimenti alle righe OLD e NEW e quando i trigger sono lo strumento giusto.
- Supporto JSONCome SQLite memorizza e interroga il JSON: estrarre campi, aggiornare valori, espandere array con json_each e indicizzare i percorsi JSON per la velocità.
- Ricerca full-textCome aggiungere la ricerca full-text a SQLite con FTS5: creare tabelle virtuali, l'operatore MATCH, il ranking BM25 e tenere l'indice sincronizzato con i dati.
- Funzioni finestraCome funzionano le window function in SQLite: OVER, PARTITION BY, funzioni di ranking, LAG/LEAD e le clausole di frame per i totali progressivi.
- Colonne generateCome funzionano le colonne generate in SQLite: dichiararle, scegliere tra VIRTUAL e STORED e indicizzarle per ricerche veloci.
- ATTACH DATABASECome ATTACH DATABASE ti permette di aprire più file SQLite in una sola connessione, interrogarli insieme con i prefissi di schema e staccarli con DETACH quando hai finito.
Safety & Application Integration
- Prepared statementCosa sono i prepared statement in SQLite, perché esistono e il ciclo di vita prepare/bind/step/finalize che ogni driver incapsula.
- Binding dei parametriCome funziona il binding dei parametri in SQLite: placeholder posizionali, parametri con nome e le regole per passare valori in sicurezza dalla tua applicazione.
- SQL injectionPerché concatenare stringhe è pericoloso, come funziona davvero la SQL injection e come le query parametrizzate in SQLite la bloccano per sempre.
- Connessioni dalle appCome le applicazioni aprono e usano un database SQLite: stringhe di connessione, percorsi dei file, driver nei vari linguaggi e le impostazioni da sistemare fin dal primo giorno.
- MigrazioniCome far evolvere uno schema SQLite in sicurezza nel tempo con PRAGMA user_version, script di migrazione ordinati e transazioni per poter tornare indietro.
- WAL e concorrenzaCome il write-ahead logging di SQLite cambia la concorrenza: lettori e scrittori smettono di bloccarsi a vicenda, e cosa fanno davvero i file -wal e -shm.
Production & Operations
- Backup e ripristinoCome fare il backup e il ripristino di un database SQLite in sicurezza: il comando .backup, VACUUM INTO, l'API di backup online e perché copiare il file è la mossa sbagliata.
- Impostazioni PRAGMALe istruzioni PRAGMA che contano davvero (journal_mode, synchronous, foreign_keys, busy_timeout, cache_size) e i valori da usare in produzione.
- Errori comuniGli errori SQLite che incontrerai davvero in produzione: database is locked, readonly database, disk image malformed, violazioni dei vincoli, e come risolverli.