2011-01-11 13 views

cevap

225

veritabanı dosyası üzerinde sqlite3 programını çağırmak çalıştırarak şemayı görmek ve özel nokta komutlarını kullanmak mümkün olmalıdır:

  • .tables masalar listeler
  • .schema [tablename], bir tablo veya tablo için CREATE ifadelerini gösterecektir

Diğer pek çok kullanışlı yerleşik nokta komutu vardır - belgelere bakın http://www.sqlite.org/sqlite.html, bölüm sqlite3'a özel komutlar.

Örnek: ayrıca SQLite sqlite_master adında sihirli tabloda şema ve veritabanının kendisi tablolar hakkında tüm bilgileri kaydeder ve bu tutularak normal SQL sorguları yürütmek de mümkün olduğunu

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

Not tablo. Örneğin, yukarıdaki belge bağlantısı, normal SQL komutlarını kullanarak .schema ve .tables komutlarının davranışını nasıl türeteceğini gösterir (bkz. Bölüm: Veritabanı şeması sorgusu).

+11

bir yaygın hata burada sql ifadelere bu yarar fonksiyonları kafa karıştırıcı .. eski bir 'gerektirmez;' sonunda ikincisinin yaptığı komut. – abbood

+1

Ben iki sütun üzerinde bir birincil anahtar olsa bile benim için bana endeksini göstermiyor mu birlikte – pratnala

+0

benim için çalışmıyor ama AnonGeek tarafından cevap – kkurian

12

Sen

.schema <table> 
16

.schema TableName

TableName Tablo adıdır

12

şu komutu yazarak yapısını alacak:

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

Bu ikisi için çalışacaktır: Komut -line ve bağlı bir veritabanına karşı çalıştırıldığında.

+7

wow, gerçekten işe yarayan soruya tek çözüm veren tek kişi sizdiniz. +1! Komut satırında veya bağlı bir veritabanında çalıştırıldığında çalıştırılacak SQL için – SpaceDog

+4

+1. Yukarıdaki komutu çalıştırmadan önce –

+4

. sütunları veri ile görüntüleyebilirsiniz. –

0

Veritabanı yapısını net olarak görüntülemek için Firefox eklentisi olan SQLite Manager adlı yazılımı kullanabilirsiniz.

19

Sen sqlite_master

SELECT sql FROM sqlite_master WHERE name='foo'; 

sorgulayabilir örneğin create table SQL deyimi:

$ 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 ama .... !!!! Niçin cehenneme koydun 'WHERE type = 'foo' 'hiçbir şey döndürmez. Birçok insan bunu düşünmeyebilir. –

+0

Sadece SQL de çalıştığı anlaşılıyor: SELECT sql FROM sqlite_master WHERE tbl_name = 'foo'; – RDP

+0

@LuisSiquot Bu bir yazım hatasıdır. WHERE type = 'foo' yerine WHERE name = 'foo'' (örnekte olduğu gibi) demek istemiştim. –

4

PHP kullanıyorsanız, bu şekilde elde edebilirsiniz:

<?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(); 
?> 
İlgili konular