sql >> Databasteknik >  >> RDS >> SQLite

2 sätt att lista tabellerna i en SQLite-databas

Här är två sätt att returnera en lista över tabeller i alla bifogade databaser i SQLite.

Den första metoden returnerar alla tabeller och vyer för alla bifogade databaser.

Den andra metoden ger dig möjlighet att returnera både tabeller och vyer, eller bara tabeller, men bara för den primära databasen.

Uppdatering dec 2021 :Sedan jag skrev den här artikeln har SQLite introducerat ett annat alternativ, som jag har listat som ett tredje bonusalternativ i slutet av den här artikeln.

Kommandot .tables

Det enklaste sättet att returnera en lista med tabeller när du använder SQLites kommandoradsskal är att använda .tables kommando.

Detta kommando kan användas med eller utan ett argument. Om du använder det utan att ange ett argument, returnerar det alla tabeller (och vyer) för alla bifogade databaser.

Exempel:

.tables

Resultat:

Album          Employee       InvoiceLine    PlaylistTrack
Artist         Genre          MediaType      Track        
Customer       Invoice        Playlist     

I mitt fall finns det bara en bifogad databas (Chinook-exempeldatabasen), och alla denna databas tabeller returneras.

Som nämnts kan du också ge ett argument till detta kommando. Ett sådant argument kan användas för att begränsa tabellerna som returneras av kommandot. Du kan till exempel namnge en specifik tabell, eller så kan du använda mönstermatchning för att endast returnera tabeller som matchar ett givet mönster.

Exempel:

.tables a%

Resultat:

Album   Artist

I det här fallet returneras endast tabeller som börjar med bokstaven "a".

En sak att tänka på är att .tables kommandot returnerar både tabellerna och åsikter. Om du vill utesluta vyer från dina resultat kan du använda mönstermatchning för att utesluta vyer. Detta fungerar bara om dina vyer använder en namnkonvention som skiljer dem från tabeller och andra objekt.

Ett annat sätt att utesluta vyer från dina resultat är att fråga sqlite_schema bord direkt. Även om den här tabellen också innehåller vyer kan du använda SQL för att utesluta dem från dina resultat om det behövs.

Sqlite_schema-tabellen

Varje SQLite-databas har ett sqlite_schema tabell som definierar schemat för databasen. Du kan använda den här tabellen för att returnera en lista med tabeller i din databas.

När du använder .tables kommando, det liknar att göra detta:

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

Det finns dock en skillnad.

Skillnaden är att den här metoden endast returnerar resultat för den primära databasen (.tables kommandot returnerar resultat för alla bifogade databaser).

Att köra ovanstående fråga returnerar följande resultat:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

Den frågan returnerar både tabellerna och vyer (precis som .tables kommandot gör).

I mitt fall finns det inga vyer, men om du vill utesluta vyer i resultaten, använd detta:

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

Resultat:

Album
Artist
Customer
Employee
Genre
Invoice
InvoiceLine
MediaType
Playlist
PlaylistTrack
Track

sqlite_schema Tabellen kan också nås genom att använda sqlite_master .

Uteslut visningar

För fullständighetens skull, här är ett snabbt exempel som använder en databas med en vy. Den här databasen innehåller en tabell (kallad Produkter ) och en vy (kallad vProducts ).

Anslut till SQLite/databasen:

sqlite3 Store.db

Kör .tables kommando:

.tables

Resultat:

Products   vProducts

Fråga sqlite_schema tabell för tabeller och visningar:

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

Resultat:

Products
vProducts

Fråga nu sqlite_schema endast för tabeller :

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

Resultat:

Products

Tillfälliga tabeller

.table kommandot returnerar både permanenta tabeller och temporära tabeller. sqlite_schema Tabell innehåller endast permanenta tabeller. Om du bara behöver returnera de tillfälliga tabellerna kan du fråga sqlite_temp_schema eller dess synonym sqlite_temp_master .

För att returnera både permanenta tabeller och temporära tabeller kan du använda en fråga som denna:

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

Bonus 3:e alternativet:table_list Pragma Statement

Sedan jag först skrev den här artikeln har SQLite introducerat tabelllistan pragma uttalande, som listar tabeller och vyer:

PRAGMA table_list;

Se PRAGMA table_list i SQLite för en översikt och exempel.


  1. Hur kontrollerar jag om en kolumn är tom eller null i MySQL?

  2. 6 vanliga felscenarier för MySQL och MariaDB, och hur man åtgärdar dem

  3. Tips för att hantera PostgreSQL på distans

  4. Vad är DBMS? – En omfattande guide till databashanteringssystem