.schema în SQLite

Linia de comandă sqlite3 sqlite3 (toate versiunile 3.x)

Afișează instrucțiunile CREATE pentru tabelele, indexurile, vederile și declanșatorii din bază, exact cum au fost scrise.

Sintaxă
.schema
.schema TIPAR
.schema --indent TIPAR

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 tabel sau PRAGMA table_info(tabel).
  • Crezi că tipul afișat de .schema este cel al datelor. În tabelele obișnuite tipul scris la coloană doar sugerează cum se salvează valorile (afinitatea); valoarea reală se vede cu typeof().
  • Modifici direct sqlite_schema ca să schimbi structura. Tabelul este doar pentru citire în mod normal; schimbările se fac cu ALTER TABLE sau 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.