Ich fange gerade erst an zu lernen SQLite . Es wäre schön, wenn man die Details einer Tabelle sehen könnte, wie bei MySQL DESCRIBE [table]
. PRAGMA table_info [table]
ist nicht gut genug, da es nur grundlegende Informationen enthält (zum Beispiel zeigt es nicht, ob eine Spalte ein Feld ist oder nicht). Gibt es in SQLite eine Möglichkeit, dies zu tun?
Antworten
Zu viele Anzeigen?El SQLite-Befehlszeilen-Dienstprogramm hat eine .schema TABLENAME
Befehl, der Ihnen die Erstellungsanweisungen anzeigt.
Suchen Sie nach dem SQL, mit dem eine Tabelle erstellt wurde? Hierfür können Sie Abfrage der sqlite_schema
Tabelle :
sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_schema;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_schema WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)
Alternative Namen
Auf die Schematabelle kann immer mit dem Namen
sqlite_schema
, insbesondere wenn sie durch den Schemanamen qualifiziert sind wiemain.sqlite_schema
otemp.sqlite_schema
. Aus Gründen der historischen Kompatibilität werden jedoch auch einige alternative Namen anerkannt, darunter:
sqlite_master
sqlite_temp_schema
sqlite_temp_master
Die Alternativen (2) und (3) funktionieren nur für die TEMP-Datenbank, die mit jeder Datenbankverbindung verbunden ist, aber Alternative (1) funktioniert überall.
Um zu verhindern, dass die Leute durch einige Kommentare zu den anderen Antworten in die Irre geführt werden:
- Si
.schema
oquery from sqlite_master
keine Ausgabe, sondern zeigt eine nicht vorhandenetablename
z.B. kann dies auch durch eine;
Semikolon am Ende für.schema
,.tables
, ... Oder einfach nur, weil die Tabelle nicht wirklich existiert. Das.schema
einfach nicht funktioniert, ist sehr unwahrscheinlich und dann sollte ein Fehlerbericht beim Sqlite-Projekt eingereicht werden.
... .schema kann nur von der Kommandozeile aus verwendet werden; die obigen Befehle > können als Abfrage über eine Bibliothek (Python, C#, etc.) ausgeführt werden. - Mark Rushakoff 25. Juli '10 um 21:09
- kann nur von der Kommandozeile aus verwendet werden' kann die Leute in die Irre führen. Fast jede (wahrscheinlich jede?) Programmiersprache kann andere Programme/Befehle aufrufen. Daher ist der zitierte Kommentar unglücklich, da der Aufruf eines anderen Programms, in diesem Fall
sqlite
eher unterstützt wird als die Tatsache, dass die Sprache einewrapper
/library
für jedes Programm (was bei der Masse der Programme nicht nur anfällig für Unvollständigkeit ist, sondern auch kontraproduktiv ist)single-source principle
kompliziertmaintenance
die das Datenchaos in der Welt noch vergrößern).
- See previous answers
- Weitere Antworten anzeigen