2011-01-11 3 views

Antwort

225

die sqlite3 Dienstprogramm auf der Datenbank-Datei aufrufen und seinen speziellen Punktbefehle verwenden:

  • .tables listet Tabellen
  • .schema [tablename] zeigt die CREATE-Anweisung (en) für eine Tabelle oder Tabellen

Es gibt viele andere nützliche integrierte Punktbefehle - siehe Dokumentation unter http://www.sqlite.org/sqlite.html, Abschnitt Spezielle Befehle für sqlite3.

Beispiel:

sqlite> entropy:~/Library/Mail>sqlite3 Envelope\ Index 
SQLite version 3.6.12 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> .tables 
addresses    ews_folders   subjects 
alarms     feeds     threads 
associations   mailboxes    todo_notes 
attachments   messages    todos 
calendars    properties    todos_deleted_log 
events     recipients    todos_server_snapshot 
sqlite> .schema alarms 
CREATE TABLE alarms (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, alarm_id, 
        todo INTEGER, flags INTEGER, offset_days INTEGER, 
        reminder_date INTEGER, time INTEGER, argument, 
        unrecognized_data BLOB); 
CREATE INDEX alarm_id_index ON alarms(alarm_id); 
CREATE INDEX alarm_todo_index ON alarms(todo); 

Beachten Sie auch, dass SQLite das Schema und alle Informationen über Tabellen in der Datenbank speichert selbst, in einem magischen Tisch sqlite_master genannt, und es ist auch möglich, normale SQL-Abfragen, dass auszuführen Tabelle. Der obige Dokumentationslink zeigt beispielsweise, wie Sie das Verhalten der Befehle .schema und .tables mithilfe normaler SQL-Befehle ableiten können (siehe Abschnitt: Abfrage des Datenbankschemas).

+11

ein häufiger Fehler ist hier diese Utility-Funktionen mit SQL-Anweisungen verwirrend .. erstere erfordert keinen ';' am Ende der Befehl, wo wie letzteres tut. – abbood

+1

Zeigt mir nicht den Index für mich, obwohl ich einen Primärschlüssel auf zwei Spalten zusammen – pratnala

+0

nicht für mich arbeiten, aber die Antwort von AnonGeek tut – kkurian

12

Sie sollten in der Lage sein, das Schema zu sehen, indem Sie

.schema <table> 
16

.schema Tablename

Wo Tablename ist der Name der Tabelle

12

Sie die Struktur erhalten, indem Sie den Befehl eingeben:

.schema <tableName> 
309
PRAGMA table_info(table_name); 

Dies wird für beide arbeiten: Befehl -line und bei Ausführung gegen eine verbundene Datenbank.

+7

wow, du warst der einzige, der die einzige Lösung für die Frage lieferte, die wirklich funktioniert. +1! – SpaceDog

+4

+1 für SQL, das in der Befehlszeile oder bei der Ausführung mit einer verbundenen Datenbank funktioniert. –

+4

Führen Sie '.header on 'aus, bevor Sie den obigen Befehl ausführen. Sie können Spalten mit Daten anzeigen. –

0

Sie können das Firefox-Add-On namens SQLite Manager verwenden, um die Struktur der Datenbank übersichtlich anzuzeigen.

19

Sie sqlite_master

SELECT sql FROM sqlite_master WHERE name='foo'; 

abfragen können, die eine zurückkehren create table SQL-Anweisung, zum Beispiel:

$ sqlite3 mydb.sqlite 
sqlite> create table foo (id int primary key, name varchar(10)); 
sqlite> select sql from sqlite_master where name='foo'; 
CREATE TABLE foo (id int primary key, name varchar(10)) 

sqlite> .schema foo 
CREATE TABLE foo (id int primary key, name varchar(10)); 

sqlite> pragma table_info(foo) 
0|id|int|0||1 
1|name|varchar(10)|0||0 
+1

+1 aber .... !!!! Warum zur Hölle hast du 'WHERE type = 'foo'' gesetzt, die nichts zurückgibt? Viele Leute denken vielleicht nicht darüber nach. –

+0

Nur um zu erwähnen, dass es scheint, auch die SQL zu arbeiten: SELECT sql FROM sqlite_master WHERE tbl_name = 'foo'; – RDP

+0

@LuisSiquot Es ist ein Tippfehler. Anstatt 'WHERE type = 'foo'' wollte ich' WHERE name = 'foo' sagen (wie im Beispiel). –

4

Wenn Sie PHP verwenden, können Sie es auf diese Weise erhalten:

<?php 
    $dbname = 'base.db'; 
    $db = new SQLite3($dbname); 
    $sturturequery = $db->query("SELECT sql FROM sqlite_master WHERE name='foo'"); 

    $table = $sturturequery->fetchArray(); 
    echo '<pre>' . $table['sql'] . '</pre>'; 

    $db->close(); 
?> 
Verwandte Themen