Database.Guide

Der er to måder at returnere en liste over tabeller i alle tilknyttede databaser i SQLite på.

Den første metode returnerer alle tabeller og visninger for alle tilknyttede 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.

Kommandoen .tables

Den nemmeste måde at returnere en liste over tabeller på, når du bruger SQLite-kommandolinjeskallen, er ved at bruge kommandoen .tables.

Denne kommando kan bruges med eller uden et argument. Hvis du bruger den uden at angive et argument, returnerer den alle tabeller (og visninger) for alle tilknyttede databaser.

Eksempel:

.tables

Resultat:

Album Employee InvoiceLine PlaylistTrackArtist Genre MediaType Track Customer Invoice Playlist 

I mit tilfælde er der kun én tilknyttet database (Chinook-eksempeldatabasen), og alle denne databases tabeller returneres.

Som nævnt kan du også angive et argument til denne kommando. Et sådant argument kan bruges til at begrænse de tabeller, der returneres af kommandoen. Du kan f.eks. nævne en bestemt tabel, eller du kan bruge mønstermatchning til kun at returnere tabeller, der passer til et givet mønster.

Eksempel:

.tables a%

Resultat:

Album Artist

I dette tilfælde returneres kun tabeller, der begynder med bogstavet “a”.

En ting, du skal være opmærksom på, er, at kommandoen .tables returnerer både tabeller og visninger. Hvis du ønsker at udelukke visninger fra dine resultater, kan du bruge mønstermatchning til at udelukke visninger. Dette vil kun fungere, hvis dine visninger bruger en navnekonvention, der adskiller dem fra tabeller og andre objekter.

En anden måde at udelukke visninger fra dine resultater på er at forespørge direkte i sqlite_master-tabellen. Selv om denne tabel også indeholder visninger, kan du bruge SQL til at udelukke dem fra dine resultater, hvis det er nødvendigt.

Tabellen sqlite_master

Alle SQLite-databaser har en sqlite_master-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 kommandoen .tables, svarer det til at gøre dette:

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

Der er dog en forskel.

Den forskel er, at denne metode kun returnerer resultater for den primære database (.tables-kommandoen returnerer resultater for alle tilknyttede databaser).

Kørsel af ovenstående forespørgsel returnerer følgende resultat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Denne forespørgsel returnerer både tabeller og visninger (ligesom .tables-kommandoen gør det).

I mit tilfælde er der ikke nogen visninger, men hvis du vil udelukke visninger i resultaterne, skal du bruge dette:

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

Resultat:

AlbumArtistCustomerEmployeeGenreInvoiceInvoiceLineMediaTypePlaylistPlaylistTrackTrack

Exclude Views

For fuldstændighedens skyld er her et hurtigt eksempel, der bruger en database med en visning. Denne database indeholder én tabel (kaldet Products) og én visning (kaldet vProducts).

Opret forbindelse til SQLite/databasen:

sqlite3 Store.db

Kør kommandoen .tables:

.tables

Resultat:

Products vProducts

Forsøg sqlite_master-tabellen for tabeller og visninger:

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

Resultat:

ProductsvProducts

Forsøg nu sqlite_master kun for tabeller:

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

Resultat:

Products

Temporære tabeller

Den .table-kommandoen returnerer både permanente tabeller og midlertidige tabeller. Tabellen sqlite_master indeholder kun permanente tabeller. Hvis du kun skal returnere de midlertidige tabeller, kan du forespørge 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_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type='table'ORDER BY name;

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.