Ce face .schema
.schema arată structura bazei sub formă de SQL: câte o instrucțiune CREATE TABLE, CREATE INDEX, CREATE VIEW sau CREATE TRIGGER pentru fiecare obiect. SQLite păstrează textul original al acestor instrucțiuni, așa că vezi și tipurile, și constrângerile, și comentariile scrise de autor.
Cu un nume de tabel, primești tabelul și obiectele legate de el (indexurile lui). Argumentul este un tipar LIKE, deci .schema com% afișează tot ce începe cu „com”. Opțiunea --indent încearcă să așeze instrucțiunile pe mai multe rânduri, ca să fie mai ușor de citit.
Informația vine din tabelul intern sqlite_schema (numit sqlite_master în versiunile vechi; ambele nume funcționează). Pentru lista coloanelor ca tabel, cu tipul fiecăreia, folosește PRAGMA table_info.
Parametri
| Parametru | Descriere |
|---|---|
TIPAR |
Opțional. Numele unui tabel sau un tipar LIKE. |
--indent |
Formatează instrucțiunile pe mai multe rânduri. |
--nosys |
Nu afișează obiectele interne, cele al căror nume începe cu sqlite_. |
Ce returnează
Textul instrucțiunilor CREATE, fiecare terminată cu punct și virgulă.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE clienti (id INTEGER PRIMARY KEY, nume TEXT NOT NULL, oras TEXT);
CREATE TABLE comenzi (id INTEGER PRIMARY KEY, client_id INTEGER REFERENCES clienti(id), total INTEGER);
CREATE INDEX idx_comenzi_client ON comenzi(client_id);
CREATE VIEW comenzi_mari AS SELECT * FROM comenzi WHERE total > 100;
INSERT INTO clienti (nume, oras) VALUES ('Ana', 'Iași'), ('Mihai', 'Cluj'), ('Ioana', NULL);
INSERT INTO comenzi (client_id, total) VALUES (1, 250), (2, 80), (1, 40);
Exemplul 1: Structura unui tabel și a indexurilor lui
.schema comenzi
Rezultat
CREATE TABLE comenzi (id INTEGER PRIMARY KEY, client_id INTEGER REFERENCES clienti(id), total INTEGER);
CREATE INDEX idx_comenzi_client ON comenzi(client_id);
Exemplul 2: O vedere, formatată
Pentru vederi, sqlite3 adaugă un comentariu cu numele coloanelor pe care le are vederea.
.schema --indent comenzi_mari
Rezultat
CREATE VIEW comenzi_mari AS SELECT * FROM comenzi WHERE total > 100
/* comenzi_mari(id,client_id,total) */;
Exemplul 3: Același text, citit cu SQL
Coloana sql din sqlite_schema ține exact textul afișat de .schema. Este utilă când vrei schema dintr-un program.
SELECT type, name, sql
FROM sqlite_schema
WHERE tbl_name = 'clienti';
Rezultat
╭───────┬─────────┬──────────────────────────────────────────────────────────────────────────────╮
│ type │ name │ sql │
╞═══════╪═════════╪══════════════════════════════════════════════════════════════════════════════╡
│ table │ clienti │ CREATE TABLE clienti (id INTEGER PRIMARY KEY, nume TEXT NOT NULL, oras TEXT) │
╰───────┴─────────┴──────────────────────────────────────────────────────────────────────────────╯
Greșeli frecvente
- Cauți
DESCRIBE tabel. SQLite nu are această comandă; folosește.schema tabelsauPRAGMA table_info(tabel). - Crezi că tipul afișat de
.schemaeste cel al datelor. În tabelele obișnuite tipul scris la coloană doar sugerează cum se salvează valorile (afinitatea); valoarea reală se vede cutypeof(). - Modifici direct
sqlite_schemaca să schimbi structura. Tabelul este doar pentru citire în mod normal; schimbările se fac cuALTER TABLEsau prin recrearea tabelului.
Comenzi înrudite
.tables: Afișează numele tabelelor și vederilor din baza de date deschisă, eventual doar pe cele care se potrivesc cu un tipar LIKE.PRAGMA table_info: Afișează coloanele unui tabel: poziția, numele, tipul declarat, NOT NULL, valoarea implicită și cheia primară..dump: Scrie toată baza de date (sau doar unele tabele) ca instrucțiuni SQL, bune pentru backup, transfer sau control al versiunilor.Afinitatea tipurilor și typeof(): În SQLite tipul aparține valorii, nu coloanei. Afinitatea coloanei doar încearcă să convertească valorile la inserare.CREATE TABLE: Creează un tabel nou. În SQLite tipul coloanei este opțional și doar sugerează cum se salvează valorile.