2011-01-11 7 views

答えて

225

は、データベースファイルにsqlite3ユーティリティを起動し実行することにより、スキーマを参照し、その特殊なドットコマンドを使用することができるはずです。

  • .tablesがテーブルに一覧表示されます
  • .schema [tablename]は、1つまたは複数のテーブルのCREATEステートメントを表示します。

その他の便利な組み込みドットコマンドがあります。http://www.sqlite.org/sqlite.htmlのドキュメントの特別なコマンドをsqlite3に表示してください。 SQLiteのはsqlite_masterという名前の魔法の表に、スキーマやデータベース自体のテーブルに関するすべての情報を保存し、それがそのに対して、通常のSQLクエリを実行することも可能だと

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

も注意してください:

例表。たとえば、上記のドキュメントリンクは、通常のSQLコマンド(データベーススキーマの照会を参照)を使用して、.schemaおよび.tablesコマンドの動作を導出する方法を示しています。

+11

1つのよくある間違いは、SQL文でこれらのユーティリティ機能を混乱さ..前者は 'を必要としませんされ;'の終わりにコマンドは後者と同じです。 – abbood

+1

私は2つの列に主キーを持っていても私のインデックスを表示しません – pratnala

+0

私のためには動作しませんが、AnonGeekの答えは – kkurian

12

あなたは

.schema <table> 
16

.schemaテーブル名

テーブル名が表

12

の名前ですあなたはコマンドを入力して、構造を取得します:

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

これは、両方のために動作します:コマンド接続されたデータベースに対して実行されたときに表示されます。

+7

うわー、あなたは本当にうまくいく質問に唯一の解決策を与える唯一の人でした。 +1! – SpaceDog

+4

+1コマンドラインで動作するSQLの場合、または接続されたデータベースに対して実行される場合は+1。 –

+4

上記のコマンドを実行する前に '.header on'を実行してください。データを含む列を表示できます。 –

0

SQLite Managerと呼ばれるFirefoxアドオンを使用して、データベースの構造をはっきりと見ることができます。

19

あなたが返されますsqlite_master

SELECT sql FROM sqlite_master WHERE name='foo'; 

を照会することができますcreate table SQL文。例:

$ 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 but .... !!!!なぜ地獄で 'WHERE type = 'foo''を返すのですか?何も返しません。多くの人々はそれについて考えないかもしれません。 –

+0

ちょうどそれがSQLを動作するようにも言及する:SELECT sql FROM sqlite_master where tbl_name = 'foo'; – RDP

+0

@LuisSiquotこれはタイプミスです。 'WHERE type = 'foo''の代わりに' WHERE name =' foo''と言うことにしました(例のように)。 –

4

あなたはPHPを使用している場合は、このようにそれを取得することができます:ここ

<?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(); 
?> 
関連する問題