Adatbázis.útmutató

Az SQLite összes csatolt adatbázisában lévő táblák listájának visszaadására kétféleképpen van lehetőség.

Az első módszer az összes csatolt adatbázis összes tábláját és nézetét adja vissza.

A második módszer lehetőséget ad arra, hogy mind a táblákat, mind a nézeteket visszaadja, vagy csak a táblákat, de csak az elsődleges adatbázisra vonatkozóan.

A .tables parancs

A legegyszerűbb módja a táblák listájának visszaadása az SQLite parancssori héj használatakor a .tables parancs használata.

Ezt a parancsot argumentummal vagy anélkül is használhatjuk. Ha argumentum megadása nélkül használja, akkor az összes csatolt adatbázis összes tábláját (és nézetét) visszaadja.

Példa:

.tables

Eredmény:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

Az én esetemben csak egy csatolt adatbázis van (a Chinook mintaadatbázis), és ennek az adatbázisnak az összes tábláját adja vissza.

Mint említettem, ehhez a parancshoz argumentumot is megadhat. Egy ilyen argumentummal korlátozhatjuk a parancs által visszaadott táblákat. Például megnevezhet egy adott táblázatot, vagy mintaillesztéssel csak az adott mintának megfelelő táblákat adhatja vissza.

Példa:

.tables a%

Eredmény:

Album Artist

Ebben az esetben csak az “a” betűvel kezdődő táblákat adja vissza.

Egy dolog, amire figyelni kell, hogy a .tables parancs táblákat és nézeteket is visszaad. Ha ki akarja zárni a nézeteket az eredményekből, akkor használhat mintaillesztést a nézetek kizárására. Ez csak akkor fog működni, ha a nézetek olyan elnevezési konvenciót használnak, amely megkülönbözteti őket a tábláktól és más objektumoktól.

A nézetek kizárásának másik módja az, ha közvetlenül az sqlite_master táblát kérdezzük le. Bár ez a tábla is tartalmaz nézeteket, az SQL segítségével szükség esetén kizárhatja őket az eredményekből.

Az sqlite_master tábla

Minden SQLite adatbázis rendelkezik egy sqlite_master táblával, amely meghatározza az adatbázis sémáját. Ezt a táblát használhatja az adatbázisban lévő táblák listájának visszaadására.

Az .tables parancs használata hasonló ahhoz, mintha ezt tennéd:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Viszont van egy különbség.

A különbség az, hogy ez a módszer csak az elsődleges adatbázisra vonatkozóan ad vissza eredményeket (a .tables parancs az összes csatolt adatbázisra vonatkozóan ad vissza eredményeket).

A fenti lekérdezés futtatása a következő eredményt adja vissza:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Ez a lekérdezés táblákat és nézeteket is visszaad (ahogyan a .tables parancs is).

Az én esetemben nincsenek nézetek, de ha ki akarja zárni a nézeteket az eredményekből, használja ezt:

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Eredmény:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Nézetek kizárása

A teljesség kedvéért itt egy gyors példa, amely egy nézettel rendelkező adatbázist használ. Ez az adatbázis egy táblát (neve Termékek) és egy nézetet (neve vTermékek) tartalmaz.

Kapcsolódás az SQLite-hoz/az adatbázishoz:

sqlite3 Store.db

Futtassa a .tables parancsot:

.tables

Eredmény:

Products vProducts

Kérdezze le az sqlite_master táblát táblákra és nézetekre:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Eredmény:

ProductsvProducts

Most kérdezze le az sqlite_master táblát csak táblákra:

SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'ORDER BY 1;

Eredmény:

Products

Temporary Tables

A .Table parancs mind az állandó táblákat, mind az ideiglenes táblákat visszaadja. Az sqlite_master tábla csak állandó táblákat tartalmaz. Ha csak az ideiglenes táblákat szeretné visszakapni, akkor az sqlite_temp_master lekérdezést használhatja.

Az állandó és az ideiglenes táblák visszakapásához egy ilyen lekérdezést használhat:

SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.