sql >> Databáze >  >> RDS >> SQLite

2 způsoby, jak vytvořit seznam tabulek v databázi SQLite

Zde jsou dva způsoby, jak vrátit seznam tabulek ve všech připojených databázích v SQLite.

První metoda vrátí všechny tabulky a pohledy pro všechny připojené databáze.

Druhá metoda vám dává možnost vrátit jak tabulky, tak pohledy, nebo jen tabulky, ale pouze pro primární databázi.

Aktualizace z prosince 2021 :Od napsání tohoto článku představil SQLite další možnost, kterou jsem uvedl jako bonusovou třetí možnost na konci tohoto článku.

Příkaz .tables

Nejjednodušší způsob, jak vrátit seznam tabulek při použití příkazového řádku SQLite, je použít .tables příkaz.

Tento příkaz lze použít s argumentem nebo bez něj. Pokud jej použijete bez zadání argumentu, vrátí všechny tabulky (a pohledy) pro všechny připojené databáze.

Příklad:

.tables

Výsledek:

Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

V mém případě je připojena pouze jedna databáze (vzorová databáze Chinook) a všechny tabulky této databáze jsou vráceny.

Jak již bylo zmíněno, k tomuto příkazu můžete také zadat argument. Takový argument lze použít k omezení tabulek vrácených příkazem. Můžete například pojmenovat konkrétní tabulku nebo můžete použít porovnávání vzorů a vrátit pouze tabulky, které odpovídají danému vzoru.

Příklad:

.tables a%

Výsledek:

Album   Artist

V tomto případě jsou vráceny pouze tabulky, které začínají písmenem „a“.

Jedna věc, kterou je třeba mít na paměti, je, že .tables příkaz vrátí obě tabulky a pohledy. Pokud chcete z výsledků vyloučit zobrazení, můžete k vyloučení zobrazení použít porovnávání vzorů. To bude fungovat pouze v případě, že vaše pohledy používají konvenci pojmenování, která je odlišuje od tabulek a jiných objektů.

Dalším způsobem, jak z výsledků vyloučit zobrazení, je dotaz na sqlite_schema stůl přímo. Přestože tato tabulka obsahuje také pohledy, můžete je v případě potřeby z výsledků vyloučit pomocí SQL.

Tabulka sqlite_schema

Každá databáze SQLite má sqlite_schema tabulka, která definuje schéma databáze. Tuto tabulku můžete použít k vrácení seznamu tabulek ve vaší databázi.

Když použijete .tables příkaz, je to podobné jako u tohoto:

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

Je tu však rozdíl.

Rozdíl je v tom, že tato metoda vrací výsledky pouze pro primární databáze (.tables příkaz vrátí výsledky pro vše připojené databáze).

Spuštění výše uvedeného dotazu vrátí následující výsledek:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Tento dotaz vrátí obě tabulky a zobrazení (stejně jako .tables příkaz ano).

V mém případě neexistují žádná zobrazení, ale pokud chcete z výsledků vyloučit zobrazení, použijte toto:

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

Výsledek:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

sqlite_schema k tabulce lze také přistupovat pomocí sqlite_master .

Vyloučit zhlédnutí

Pro úplnost uvádíme rychlý příklad, který používá databázi s pohledem. Tato databáze obsahuje jednu tabulku (nazvanou Produkty ) a jeden pohled (nazývaný vProdukty). ).

Připojte se k SQLite/databázi:

sqlite3 Store.db

Spusťte .tables příkaz:

.tables

Výsledek:

Products   vProducts

Dotaz na sqlite_schema tabulka pro tabulky a zobrazení:

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

Výsledek:

Products
vProducts

Nyní zadejte dotaz sqlite_schema pouze pro tabulky :

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

Výsledek:

Products

Dočasné tabulky

.table příkaz vrátí jak trvalé tabulky, tak dočasné tabulky. sqlite_schema tabulka obsahuje pouze trvalé tabulky. Pokud potřebujete vrátit pouze dočasné tabulky, můžete dotaz na sqlite_temp_schema nebo jeho synonymum sqlite_temp_master .

Chcete-li vrátit trvalé i dočasné tabulky, můžete použít dotaz jako tento:

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

Bonus 3. možnost:Table_list Pragma Statement

Od doby, kdy jsem poprvé napsal tento článek, SQLite zavedl table_list prohlášení pragma, které uvádí tabulky a pohledy:

PRAGMA table_list;

Viz PRAGMA table_list v SQLite pro přehled a příklady.


  1. Funkce NLS_CHARSET_NAME() v Oracle

  2. Jak spočítáte počet výskytů určitého podřetězce ve varcharu SQL?

  3. MySQL:#126 – Nesprávný soubor klíče pro tabulku

  4. Jak chránit databázi MySQL nebo MariaDB před SQL Injection:Část druhá