2011-01-11 37 views

Trả lời

225

Gọi tiện ích sqlite3 vào file cơ sở dữ liệu, và sử dụng lệnh chấm đặc biệt của nó:

  • .tables sẽ liệt kê bảng
  • .schema [tablename] sẽ hiển thị (các) câu lệnh CREATE cho một bảng hoặc bảng

Có nhiều lệnh dấu chấm dựng sẵn hữu ích khác - xem tài liệu tại http://www.sqlite.org/sqlite.html, phần Lệnh đặc biệt để sqlite3.

Ví dụ:

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

Cũng lưu ý rằng SQLite tiết kiệm giản đồ và tất cả các thông tin về các bảng trong cơ sở dữ liệu riêng của mình, trong một bảng kỳ diệu mang tên sqlite_master, và nó cũng có thể để thực hiện các truy vấn SQL bình thường so với bàn. Ví dụ, liên kết tài liệu ở trên cho thấy cách lấy được hành vi của các lệnh .schema.tables, sử dụng các lệnh SQL bình thường (xem phần: Truy vấn lược đồ cơ sở dữ liệu).

+11

một sai lầm phổ biến ở đây là khó hiểu các chức năng tiện ích với báo cáo sql .. cựu không đòi hỏi một '; 'ở phần cuối của lệnh ở vị trí sau. – abbood

+1

Không hiển thị cho tôi chỉ mục cho tôi mặc dù tôi có khóa chính trên hai cột cùng nhau – pratnala

+0

không hoạt động đối với tôi nhưng câu trả lời của AnonGeek là – kkurian

12

Bạn sẽ có thể để xem sơ đồ bằng cách chạy

.schema <table> 
16

.schema TableName

đâu TableName là tên của bảng

12

Bạn sẽ nhận được cấu trúc bằng cách gõ lệnh:

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

này sẽ làm việc cho cả hai: lệnh -trực tuyến và khi được thực thi đối với một cơ sở dữ liệu được kết nối.

+7

wow, bạn là người duy nhất đưa ra giải pháp duy nhất cho câu hỏi thực sự hiệu quả. +1! – SpaceDog

+4

+1 cho SQL sẽ hoạt động trên dòng lệnh hoặc khi được thực hiện dựa trên cơ sở dữ liệu được kết nối. –

+4

thực thi '.header on' trước khi thực thi lệnh trên. bạn có thể xem các cột có dữ liệu. –

0

Bạn có thể sử dụng trình bổ sung Firefox có tên SQLite Manager để xem cấu trúc của cơ sở dữ liệu một cách rõ ràng.

19

Bạn có thể truy vấn sqlite_master

SELECT sql FROM sqlite_master WHERE name='foo'; 

mà sẽ trả về một create table Câu lệnh SQL, ví dụ:

$ 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 nhưng .... !!!! tại sao bạn lại đặt 'WHERE type = 'foo'' mà không trả về gì cả. Nhiều người có thể không nghĩ về điều đó. –

+0

Chỉ cần đề cập đến rằng nó dường như cũng làm việc SQL: SELECT sql FROM sqlite_master WHERE tbl_name = 'foo'; – RDP

+0

@LuisSiquot Nó là một lỗi đánh máy. Thay vì 'WHERE type = 'foo'' tôi muốn nói' WHERE name = 'foo'' (như trong ví dụ). –

4

Nếu bạn đang sử dụng PHP bạn có thể nhận nó theo cách này:

<?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(); 
?> 
Các vấn đề liên quan