Her er to måder at returnere en liste over tabeller i alle vedhæftede databaser i SQLite.
Den første metode returnerer alle tabeller og visninger for alle vedhæftede databaser.
Den anden metode giver dig mulighed for at returnere både tabeller og visninger, eller kun tabeller, men kun for den primære database.
Opdatering dec. 2021 :Siden jeg skrev denne artikel, har SQLite introduceret en anden mulighed, som jeg har angivet som en bonus tredje mulighed i slutningen af denne artikel.
.tables-kommandoen
Den nemmeste måde at returnere en liste over tabeller på, når du bruger SQLite-kommandolinjeskallen, er at bruge .tables
kommando.
Denne kommando kan bruges med eller uden et argument. Hvis du bruger det uden at angive et argument, returnerer det alle tabeller (og visninger) for alle vedhæftede databaser.
Eksempel:
.tables
Resultat:
Album Employee InvoiceLine PlaylistTrack Artist Genre MediaType Track Customer Invoice Playlist
I mit tilfælde er der kun én vedhæftet database (Chinook-eksempeldatabasen), og alle denne databases tabeller returneres.
Som nævnt kan du også give et argument til denne kommando. Et sådant argument kan bruges til at begrænse de tabeller, der returneres af kommandoen. For eksempel kan du navngive en specifik tabel, eller du kan bruge mønstermatchning til kun at returnere tabeller, der matcher et givet mønster.
Eksempel:
.tables a%
Resultat:
Album Artist
I dette tilfælde returneres kun tabeller, der begynder med bogstavet "a".
En ting at være opmærksom på er, at .tables
kommandoen returnerer både tabeller og visninger. Hvis du vil ekskludere visninger fra dine resultater, kan du bruge mønstermatchning til at ekskludere visninger. Dette vil kun fungere, hvis dine visninger bruger en navngivningskonvention, der adskiller dem fra tabeller og andre objekter.
En anden måde at ekskludere visninger fra dine resultater på er at forespørge på sqlite_schema bord direkte. Selvom denne tabel også indeholder visninger, kan du bruge SQL til at ekskludere dem fra dine resultater, hvis det er nødvendigt.
sqlite_schema-tabellen
Hver SQLite-database har et sqlite_schema tabel, der definerer skemaet for databasen. Du kan bruge denne tabel til at returnere en liste over tabeller i din database.
Når du bruger .tables
kommando, det svarer til at gøre dette:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Der er dog en forskel.
Forskellen er, at denne metode kun returnerer resultater for den primære databasen (.tables
kommandoen returnerer resultater for alle vedhæftede databaser).
Kørsel af ovenstående forespørgsel returnerer følgende resultat:
Album Artist Customer Employee Genre Invoice InvoiceLine MediaType Playlist PlaylistTrack Track
Den forespørgsel returnerer både tabeller og visninger (ligesom .tables
kommando gør).
I mit tilfælde er der ingen visninger, men hvis du vil udelukke visninger i resultaterne, skal du bruge dette:
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 også tilgås ved at bruge sqlite_master .
Ekskluder visninger
For fuldstændighedens skyld er her et hurtigt eksempel, der bruger en database med udsigt. Denne database indeholder én tabel (kaldet Produkter ) og én visning (kaldet vProducts ).
Opret forbindelse til SQLite/databasen:
sqlite3 Store.db
Kør .tables
kommando:
.tables
Resultat:
Products vProducts
Forespørg på sqlite_schema tabel for borde og visninger:
SELECT name FROM sqlite_schema
WHERE type IN ('table','view')
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultat:
Products vProducts
Forespørg nu sqlite_schema kun til tabeller :
SELECT name FROM sqlite_schema
WHERE type = 'table'
AND name NOT LIKE 'sqlite_%'
ORDER BY 1;
Resultat:
Products
Midlertidige tabeller
.table
kommando returnerer både permanente tabeller og midlertidige tabeller. sqlite_schema tabel indeholder kun permanente tabeller. Hvis du kun skal returnere de midlertidige tabeller, kan du forespørge sqlite_temp_schema eller dets synonym sqlite_temp_master .
For at returnere både permanente tabeller og midlertidige tabeller, kan du bruge en forespørgsel som denne:
SELECT name FROM
(SELECT * FROM sqlite_schema UNION ALL
SELECT * FROM sqlite_temp_schema)
WHERE type='table'
ORDER BY name;
Bonus 3. mulighed:table_list Pragma Statement
Siden jeg første gang skrev denne artikel, har SQLite introduceret table_list pragma-erklæring, som viser tabeller og visninger:
PRAGMA table_list;
Se PRAGMA
table_list i SQLite for en oversigt og eksempler.