Czy istnieje SQLite odpowiednik DESCRIBE [tabela] MySQL?

442

Właśnie zaczynam uczyć się SQLite . Byłoby miło móc zobaczyć szczegóły tabeli, takie jak MySQL DESCRIBE [table]. PRAGMA table_info [table]nie jest wystarczająco dobry, ponieważ ma tylko podstawowe informacje (na przykład nie pokazuje, czy kolumna jest jakimś polem, czy nie). Czy SQLite ma na to sposób?

Mateusz
źródło

Odpowiedzi:

560

Narzędzie wiersza polecenia SQLite zawiera .schema TABLENAMEpolecenie, które wyświetla instrukcje tworzenia.

Ned Batchelder
źródło
65
Możesz użyć „.schema” bez stołu, a zobaczysz je wszystkie.
Dan Benamy,
43
Nie zapomnij pominąć średnika na końcu oświadczenia
RTF
10
Średnik dwukropek nie jest wymagany
Simon
40
@Simon średnik spowoduje, że polecenie po cichu się nie powiedzie .
djeikyb
4
@djeikyb. nie należy tego uważać za błąd?
Makan Tayebi,
292
PRAGMA table_info([tablename]);
Strater
źródło
19
To wydaje się bardziej odpowiadać opisowi MySQL niż .schema tablenamemnie.
tybro0103
2
Tak. To zadziałało dla mnie. .schema TABLENAME nie. Jednak sam .schema pokazuje wszystkie instrukcje tworzenia, ale wynik PRAGMA jest o wiele bardziej przydatny, jeśli chcę tylko spojrzeć na jedną tabelę.
Dev Kanchen,
15
Wydaje się, że powinna to być akceptowana odpowiedź, ponieważ działa ona poprzez zapytania zamiast być zależnym od interfejsu wiersza poleceń. +1 ode mnie
Akoi Meexx,
Dodatek: Jedyne, co zauważam, to to, że nie generuje klucza podstawowego podczas tworzenia tabeli z INTEGEROWYM kluczem podstawowym, tylko INTEGER.
Akoi Meexx,
3
@AkoiMeexx: Z mojego pierwotnego pytania: „ PRAGMA table_info [table]nie jest wystarczająco dobre, ponieważ zawiera tylko podstawowe informacje (na przykład nie pokazuje, czy kolumna jest jakimś polem, czy nie)”.
Matthew
116

Szukasz kodu SQL używanego do generowania tabeli? W tym celu możesz wysłać zapytanie do sqlite_mastertabeli :

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)
Mark Rushakoff
źródło
Czy jest jakaś różnica między tym a .schema foo?
Matthew
15
@Matthew: .schemamożna go używać tylko z wiersza poleceń; powyższe polecenia można uruchamiać jako zapytanie za pośrednictwem biblioteki (Python, C # itp.).
Mark Rushakoff,
@MarkRushakoff Ale wynik jest taki sam?
dvb,
2
+1 „WYBIERZ * OD sqlite_master” działa w narzędziach chrome dev podczas debugowania WebSql
contactmatt
52

Aby zobaczyć wszystkie tabele:

.tables

Aby zobaczyć konkretną tabelę:

.schema [tablename]
Ross Snyder
źródło
6

Aby zapobiec wprowadzaniu w błąd przez niektóre komentarze do innych odpowiedzi:

  1. Jeśli .schemaani query from sqlite_masternie daje żadnego wyjścia, oznacza to nieistniejący tablename, na przykład może to być również spowodowane przez ;średnik na końcu do .schema, .tables... Albo po prostu dlatego, że tabela naprawdę nie istnieje. To .schemapo prostu nie działa jest bardzo mało prawdopodobne, a następnie należy zgłosić błąd w projekcie sqlite.

... .schema może być używane tylko z wiersza poleceń; powyższe polecenia> można uruchomić jako zapytanie za pośrednictwem biblioteki (Python, C # itp.). - Mark Rushakoff, 25 lipca 2010 o 21:09

  1. „można używać tylko z wiersza poleceń” może wprowadzać ludzi w błąd. Prawie każdy (prawdopodobnie każdy?) Język programowania może wywoływać inne programy / polecenia. Dlatego cytowany komentarz jest pechowy, ponieważ wywoływanie innego programu, w tym przypadku sqlite, jest bardziej prawdopodobne, że będzie obsługiwane, niż że język zapewnia wrapper/ librarydla każdego programu (który jest nie tylko podatny na niekompletność z powodu samej natury wielu programów tam , ale także przeciwdziała single-source principle, komplikuje maintenance, pogłębia chaos danych na świecie).
Radagast
źródło
1
Każdy, kto pisze program do pobierania danych z dowolnej bazy danych SQL, powinien używać odpowiednich sterowników SQL dostępnych dla swojego języka programowania do uzyskiwania dostępu do bazy danych i wykonywania na niej zapytań. To odpowiedni sposób na dostęp do bazy danych. Nigdy nie zalecałbym włamania się do programu wiersza polecenia zaprojektowanego do dostarczania zapytań ad hoc. Twoja sugestia jest głęboko błędna. Program wiersza poleceń do zapytań ad hoc NIE JEST NAJLEPSZY punkt dostępu do kodu programu do uruchamiania zapytań w bazie danych. Korzystanie ze sterowników SQL NIE JEST NA PEWNO „komplikujące konserwację” - jest to najlepsza praktyka.
Medlock Perlman
Zgadzam się, że nie jest źle, jest podobny do bibliotek. Właśnie dlatego Linux | BSD rozprasza menedżerów pakietów wysyłkowych. I dlaczego istnieje 0install PM dla wielu platform. Chciałem tylko wyjaśnić, że nie wszystkie programy wymagają opakowań. To nie ma sensu za każdym razem. W tym przypadku (obsługa DB) oczywiście nie jest złym pomysłem użycie opakowania.
Radagast
1

Jeśli używasz narzędzia graficznego. Pokazuje schemat tuż obok nazwy tabeli. W przypadku przeglądarki DB dla Sqlite kliknij, aby otworzyć bazę danych (prawy górny róg), nawiguj i otwórz bazę danych, zobaczysz informacje wypełnione w tabeli, jak poniżej.

wprowadź opis zdjęcia tutaj

kliknij prawym przyciskiem myszy rekord / nazwa_tabeli, kliknij kopię instrukcji tworzenia i gotowe.

Mam nadzieję, że pomogło to niektórym początkującym, którzy nie pracowali z wierszem poleceń.

Mujeeb Ishaque
źródło