Có SQLite tương đương với MÔ TẢ [bảng] của MySQL không?


441

Tôi mới bắt đầu học SQLite . Thật tuyệt khi có thể xem chi tiết cho một bảng, như của MySQL DESCRIBE [table]. PRAGMA table_info [table]không đủ tốt, vì nó chỉ có thông tin cơ bản (ví dụ: nó không hiển thị nếu một cột có phải là một trường thuộc loại nào đó hay không). SQLite có cách nào để làm điều này không?

Câu trả lời:


559

Các tiện ích dòng lệnh SQLite.schema TABLENAMElệnh đó chương trình bạn tạo báo cáo.


65
Bạn có thể sử dụng ".schema" mà không cần bảng và nó sẽ hiển thị cho bạn tất cả chúng.
Dan Benamy

43
Đừng quên bỏ dấu chấm phẩy vào cuối bản tuyên bố
RTF

10
Không cần bán dấu hai chấm
Simon

40
@Simon một dấu chấm phẩy sẽ khiến lệnh âm thầm thất bại .
djeikyb

4
@djeikyb. không nên coi đây là một lỗi?
Makan Tayebi

292
PRAGMA table_info([tablename]);

19
Điều này có vẻ tương đương với mô tả của MySQL hơn là .schema tablenamevới tôi.
tybro0103

2
Vâng. Điều này làm việc cho tôi. .schema TABLENAME đã không. Tuy nhiên, một mình .schema cho bạn thấy tất cả các câu lệnh tạo, nhưng kết quả từ PRAGMA sẽ hữu ích hơn rất nhiều nếu tôi chỉ muốn nhìn vào một bảng.
Dev Kanchen

15
Đây có vẻ như là câu trả lời được chấp nhận vì nó hoạt động thông qua truy vấn thay vì phụ thuộc vào giao diện dòng lệnh. +1 từ tôi.
Akoi Meexx

Phụ lục: Điều duy nhất tôi nhận thấy là nó không tạo ra PRIMARY KEY khi tôi tạo một bảng với KEY PRIMARY KEY, chỉ là INTEGER.
Akoi Meexx

3
@AkoiMeexx: Từ câu hỏi ban đầu của tôi: " PRAGMA table_info [table]không đủ tốt, vì nó chỉ có thông tin cơ bản (ví dụ: nó không hiển thị nếu một cột có phải là một lĩnh vực nào đó hay không)."
Matthew

115

Bạn đang tìm kiếm SQL được sử dụng để tạo bảng? Đối với điều đó, bạn có thể truy vấn sqlite_masterbảng :

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)

Có sự khác biệt nào giữa cái này và .schema fookhông?
Matthew

15
@Matthew: .schemachỉ có thể được sử dụng từ một dòng lệnh; các lệnh trên có thể được chạy dưới dạng truy vấn thông qua thư viện (Python, C #, v.v.).
Mark Rushakoff

@MarkRushakoff Nhưng kết quả có giống nhau không?
dvb

2
+1 "CHỌN * TỪ sqlite_master" hoạt động trong các công cụ chrome dev khi gỡ lỗi WebSql
contactmatt

52

Để xem tất cả các bảng:

.tables

Để xem một bảng cụ thể:

.schema [tablename]

6

Để ngăn chặn việc mọi người bị đánh lừa bởi một số ý kiến ​​cho các câu trả lời khác:

  1. Nếu .schemahoặc query from sqlite_masterkhông cung cấp cho bất kỳ đầu ra, nó cho thấy một không tồn tại tablename, ví dụ này cũng có thể được gây ra bởi một ;dấu chấm phẩy ở cuối cho .schema, .tables... Hoặc chỉ vì bàn thực sự không tồn tại. Điều đó .schemachỉ không hoạt động là rất khó xảy ra và sau đó một báo cáo lỗi nên được nộp tại dự án sqlite.

... .Schema chỉ có thể được sử dụng từ một dòng lệnh; các lệnh trên> có thể được chạy dưới dạng truy vấn thông qua thư viện (Python, C #, v.v.). - Mark Rushakoff ngày 25 tháng 7, 10 lúc 21:09

  1. 'Chỉ có thể được sử dụng từ một dòng lệnh' có thể đánh lừa mọi người. Hầu như mọi ngôn ngữ lập trình (có thể là mọi?) Có thể gọi các chương trình / lệnh khác. Do đó, nhận xét được trích dẫn là không may mắn khi gọi một chương trình khác, trong trường hợp này sqlite, có nhiều khả năng được hỗ trợ hơn là ngôn ngữ cung cấp wrapper/ librarycho mọi chương trình (không chỉ dễ bị không hoàn chỉnh bởi chính bản chất của số lượng lớn các chương trình ngoài đó , nhưng cũng là hành động chống lại single-source principle, làm phức tạp maintenance, làm tăng thêm sự hỗn loạn của dữ liệu trên thế giới).

1
Bất kỳ ai viết chương trình để lấy dữ liệu từ bất kỳ cơ sở dữ liệu SQL nào cũng nên sử dụng trình điều khiển SQL thích hợp có sẵn cho ngôn ngữ lập trình của họ để truy cập cơ sở dữ liệu và thực hiện các truy vấn trên đó. Đó là cách thích hợp để truy cập cơ sở dữ liệu. Tôi sẽ không bao giờ khuyên bạn nên hack một chương trình dòng lệnh được thiết kế để cung cấp các truy vấn đặc biệt. Đề nghị của bạn là sai lầm sâu sắc. Một chương trình dòng lệnh cho các truy vấn đặc biệt là CERTAINLY KHÔNG phải là điểm truy cập phù hợp nhất cho mã chương trình để chạy các truy vấn trên cơ sở dữ liệu. Sử dụng trình điều khiển SQL là KHÔNG CÓ "phức tạp bảo trì" - đó là cách tốt nhất.
Medlock Perlman

Tôi đồng ý nó không tệ, nó tương tự như thư viện. Đó là lý do tại sao Linux | BSD phân phối các trình quản lý gói. Và tại sao có 0install đa nền tảng PM. Quan điểm của tôi chỉ là làm rõ rằng không phải tất cả các chương trình đều cần trình bao bọc. Nó không có ý nghĩa mọi lúc. Trong trường hợp này (xử lý DB) tất nhiên không phải là ý tưởng tồi khi sử dụng trình bao bọc.
Radagast

1

Nếu bạn đang sử dụng một công cụ đồ họa. Nó cho bạn thấy lược đồ ngay bên cạnh tên bảng. Trong trường hợp DB Browser For Sqlite , nhấp để mở cơ sở dữ liệu (góc trên cùng bên phải), điều hướng và mở cơ sở dữ liệu của bạn, bạn sẽ thấy thông tin được điền trong bảng như bên dưới.

nhập mô tả hình ảnh ở đây

nhấp chuột phải vào bản ghi / tên_bảng, nhấp vào sao chép tạo câu lệnh và bạn đã có nó.

Hy vọng nó đã giúp một số người mới bắt đầu không làm việc với dòng lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.