Apakah ada SQLite yang setara dengan DESCRIBE [tabel] MySQL?

443

Saya baru mulai belajar SQLite . Akan menyenangkan untuk dapat melihat detail untuk sebuah tabel, seperti MySQL DESCRIBE [table]. PRAGMA table_info [table]tidak cukup baik, karena hanya memiliki informasi dasar (misalnya, itu tidak menunjukkan apakah suatu kolom adalah bidang atau tidak). Apakah SQLite punya cara untuk melakukan ini?

Matius
sumber

Jawaban:

561

The SQLite utilitas baris perintah memiliki .schema TABLENAMEperintah yang menunjukkan Anda membuat pernyataan.

Ned Batchelder
sumber
66
Anda dapat menggunakan ".schema" tanpa tabel dan itu akan menunjukkan kepada Anda semuanya.
Dan Benamy
43
Jangan lupa untuk meninggalkan titik koma di akhir pernyataan
RTF
10
Semi-colon tidak diperlukan
Simon
40
@Simon semi-colon akan menyebabkan perintah gagal diam-diam .
djeikyb
4
@djeikyb. tidakkah ini dianggap sebagai bug?
Makan Tayebi
292
PRAGMA table_info([tablename]);
Strater
sumber
19
Ini tampaknya lebih setara dengan deskripsi MySQL daripada .schema tablenamesaya.
tybro0103
2
Ya. Ini berhasil untuk saya. .schema TABLENAME tidak. .schema sendiri, bagaimanapun, tidak menunjukkan semua membuat pernyataan, tetapi hasil dari PRAGMA jauh lebih berguna jika saya hanya ingin melihat satu tabel.
Dev Kanchen
15
Sepertinya ini harus menjadi jawaban yang diterima karena berfungsi melalui kueri alih-alih bergantung pada antarmuka baris perintah. +1 dari saya.
Akoi Meexx
Tambahan: Satu-satunya hal yang saya perhatikan adalah bahwa itu tidak menampilkan KUNCI UTAMA ketika saya membuat tabel dengan KUNCI UTAMA INTEGER, hanya INTEGER.
Akoi Meexx
3
@AkoiMeexx: Dari pertanyaan asli saya: " PRAGMA table_info [table]tidak cukup baik, karena hanya memiliki informasi dasar (misalnya, itu tidak menunjukkan apakah suatu kolom adalah bidang semacam atau tidak)."
Matius
116

Apakah Anda mencari SQL yang digunakan untuk menghasilkan tabel? Untuk itu, Anda dapat menanyakan sqlite_mastertabel :

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)
Mark Rushakoff
sumber
Apakah ada perbedaan antara ini dan .schema foo?
Matius
15
@ Matthew: .schemahanya dapat digunakan dari baris perintah; perintah di atas dapat dijalankan sebagai kueri melalui pustaka (Python, C #, dll.).
Mark Rushakoff
@ MarkRushakoff Tapi hasilnya sama?
dvb
2
+1 "SELECT * FROM sqlite_master" bekerja di perangkat dev krom ketika men-debug WebSql
contactmatt
52

Untuk melihat semua tabel:

.tables

Untuk melihat tabel tertentu:

.schema [tablename]
Ross Snyder
sumber
6

Untuk mencegah orang disesatkan oleh beberapa komentar ke jawaban lain:

  1. Jika .schemaatau query from sqlite_mastertidak memberikan output apapun, itu menunjukkan tidak ada tablename, misalnya ini mungkin juga disebabkan oleh ;titik koma di akhir untuk .schema, .tables, ... Atau hanya karena meja benar-benar tidak ada. Itu .schematidak berfungsi sangat tidak mungkin dan kemudian laporan bug harus diajukan di proyek sqlite.

... .schema hanya dapat digunakan dari baris perintah; perintah di atas> dapat dijalankan sebagai kueri melalui pustaka (Python, C #, dll.). - Mark Rushakoff 25 Juli 10 jam 21:09

  1. 'hanya dapat digunakan dari baris perintah' dapat menyesatkan orang. Hampir semua bahasa pemrograman (kemungkinan setiap?) Dapat memanggil program / perintah lain. Oleh karena itu komentar yang dikutip tidak beruntung karena memanggil program lain, dalam hal ini sqlite, lebih mungkin didukung daripada bahasa yang menyediakan wrapper/ libraryuntuk setiap program (yang tidak hanya rentan terhadap ketidaklengkapan oleh sifat massa program di luar sana. , tetapi juga bertindak melawan single-source principle, menyulitkan maintenance, memajukan kekacauan data di dunia).
Radagast
sumber
1
Siapa pun yang menulis program untuk mengambil data dari database SQL apa pun harus menggunakan driver SQL yang tepat yang tersedia untuk bahasa pemrograman mereka untuk mengakses database dan melakukan kueri di dalamnya. Itu adalah cara yang tepat untuk mengakses database. Saya tidak akan merekomendasikan meretas program baris perintah yang dirancang untuk memberikan pertanyaan ad-hoc. Saran Anda sangat keliru. Program baris perintah untuk kueri ad-hoc adalah PASTI BUKAN titik akses yang paling tepat untuk kode program untuk menjalankan kueri pada database. Menggunakan driver SQL PASTI BUKAN 'pemeliharaan rumit' - itu adalah praktik terbaik.
Medlock Perlman
Saya setuju itu tidak buruk, mirip dengan perpustakaan. Itulah sebabnya distro Linux | BSD mengirimkan manajer paket. Dan mengapa ada 0install lintas platform PM. Maksud saya hanya untuk mengklarifikasi bahwa tidak semua program membutuhkan pembungkus. Tidak masuk akal setiap saat. Dalam hal ini (penanganan DB) tentu saja bukan ide yang buruk untuk menggunakan pembungkus.
Radagast
1

Jika Anda menggunakan alat grafis. Ini menunjukkan skema tepat di sebelah nama tabel. Dalam hal DB Browser Untuk Sqlite , klik untuk membuka basis data (sudut kanan atas), navigasi dan buka basis data Anda, Anda akan melihat informasi yang terisi dalam tabel seperti di bawah ini.

masukkan deskripsi gambar di sini

klik kanan pada record / table_name, klik pada copy buat pernyataan dan di sana Anda memilikinya.

Semoga bisa membantu beberapa pemula yang gagal bekerja dengan commandline.

Mujeeb Ishaque
sumber