2011-01-11 11 views

Odpowiedz

225

Wywołanie narzędzia sqlite3 w pliku bazy danych i korzystać z jego specjalnych poleceń DOT:

  • .tables będzie lista Stoły
  • .schema [tablename] pokaże instrukcje CREATE dla tabeli lub tabel

Istnieje wiele innych użytecznych wbudowanych poleceń dot - patrz dokumentacja na http://www.sqlite.org/sqlite.html, sekcja Specjalne polecenia do sqlite3.

Przykład:

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); 

Należy również zauważyć, że SQLite zapisuje schematu i wszystkie informacje na temat tabel w samej bazy danych, w magicznym tabeli o nazwie sqlite_master, i jest to również możliwe, aby wykonać normalne zapytań SQL przeciwko tej stół. Na przykład powyższy link do dokumentacji pokazuje, jak wyprowadzić zachowanie komend .schema i .tables, używając normalnych poleceń SQL (patrz sekcja: Zapytanie o schemat bazy danych).

+11

jeden Częstym błędem tutaj jest niejasna tych funkcji użytkowych z SQL .. Była nie wymaga ';' na końcu polecenie, gdzie tak samo jak to drugie. – abbood

+1

Nie pokazuje mi indeksu, mimo że mam klucz podstawowy na dwóch kolumnach razem – pratnala

+0

nie działa dla mnie, ale odpowiedź AnonGeek robi – kkurian

12

Powinieneś być w stanie zobaczyć schemat, uruchamiając

.schema <table> 
16

.schema TableName

Gdzie TableName to nazwa tabeli

12

Dostaniesz strukturę, wpisując polecenie:

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

to będzie pracować dla obu: komenda -line i po uruchomieniu względem połączonej bazy danych.

+7

Wow, byłeś jedynym, który dał jedyne rozwiązanie pytania, które naprawdę działa. +1! – SpaceDog

+4

+1 dla SQL, który będzie działał w wierszu poleceń lub gdy zostanie wykonany względem połączonej bazy danych. –

+4

Wykonaj '.header on' przed wykonaniem powyższego polecenia. możesz wyświetlać kolumny z danymi. –

0

Możesz użyć dodatku Firefox o nazwie SQLite Manager, aby przejrzeć strukturę bazy danych wyraźnie.

19

Można zapytać sqlite_master

SELECT sql FROM sqlite_master WHERE name='foo'; 

która zwróci create table Instrukcja SQL, na przykład:

$ 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, ale .... !!!! dlaczego u diabła wstawiłeś 'WHERE type = 'foo'', który nic nie zwraca. Wiele osób może o tym nie myśleć. –

+0

Wystarczy wspomnieć, że wydaje się również działać w SQL: SELECT sql FROM sqlite_master WHERE tbl_name = 'foo'; – RDP

+0

@LuisSiquot To jest literówka. Zamiast "WHERE type =" foo "miałem zamiar powiedzieć' WHERE name = 'foo'' (jak w przykładzie). –

4

Jeśli używasz PHP można dostać to w ten sposób:

<?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(); 
?> 
Powiązane problemy