MySQL'in DESCRIBE [tablosuna] eşdeğer bir SQLite var mı?


443

SQLite öğrenmeye yeni başladım . MySQL gibi bir tablonun ayrıntılarını görmek güzel olurdu DESCRIBE [table]. PRAGMA table_info [table]yalnızca temel bilgilere sahip olduğu için yeterli değil (örneğin, bir sütunun bir tür alan olup olmadığını göstermez). SQLite'ın bunu yapmanın bir yolu var mı?

Yanıtlar:


561

SQLite komut satırı yardımcı programı bir sahiptir .schema TABLENAMEEğer gösterir ifadeler oluşturun bu komutu.


66
".Schema" yı bir tablo olmadan kullanabilirsiniz ve size hepsini gösterecektir.
Dan Benamy

43
İfadenin sonunda noktalı virgül bırakmayı unutmayın
RTF

10
Noktalı virgül gerekli değildir
Simon

40
@ Yarı noktalı bir nokta komutun sessizce başarısız olmasına neden olur .
djeikyb

4
@djeikyb. bu bir hata olarak görülmemeli mi?
Makan Tayebi

292
PRAGMA table_info([tablename]);

19
Bu, MySQL'in açıklamasına .schema tablenamebenden daha fazla benziyor .
tybro0103

2
Evet. Bu benim için çalıştı. .schema TABLENAME almadı. Ancak .schema tek başına, tüm create ifadelerini gösterir, ancak PRAGMA sonucu sadece bir tabloya bakmak istersem çok daha yararlıdır.
Dev Kanchen

15
Bu, komut satırı arabirimine bağımlı olmak yerine sorgulama yoluyla çalıştığı için kabul edilen yanıt olması gerektiği gibi görünüyor. Benden +1.
Akoi Meexx

Ek: Fark ettiğim tek şey, INTEGER PRIMARY KEY, sadece INTEGER ile bir tablo oluşturduğumda PRIMARY KEY çıktısı vermiyor.
Akoi Meexx

3
@AkoiMeexx: Orijinal sorumdan: " PRAGMA table_info [table]yalnızca temel bilgilere sahip olduğu için yeterince iyi değil (örneğin, bir sütunun bir tür alan olup olmadığını göstermez)."
Matthew

116

Tablo oluşturmak için kullanılan SQL'i mi arıyorsunuz? Bunun için tabloyu sorgulayabilirsinizsqlite_master :

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)

Bu ile arasında bir fark var mı .schema foo?
Matthew

15
@Matthew: .schemayalnızca komut satırından kullanılabilir; yukarıdaki komutlar bir kütüphane (Python, C # vb.) üzerinden sorgu olarak çalıştırılabilir.
Mark Rushakoff

@MarkRushakoff Ama sonuç aynı mı?
DVB

2
1 "sqlite_master" SELECT * FROM krom dev araçları çalışır zaman ayıklama WebSql
contactmatt

52

Tüm tabloları görmek için:

.tables

Belirli bir tabloyu görmek için:

.schema [tablename]

6

İnsanların diğer cevapların yorumlarından bazıları tarafından yanıltılmasını önlemek için:

  1. Eğer .schemaveya query from sqlite_masterherhangi bir çıktı verir, bu varolmayan belirten tablenamebu da bir neden olabilir, örneğin ;için sonunda noktalı virgül .schema, .tables... Ya tablo gerçekten var diye. Bu .schemaişe yaramazsa çok olası değildir ve sqlite projesinde bir hata raporu sunulmalıdır.

... .schema sadece bir komut satırından kullanılabilir; yukarıdaki komutlar> bir kütüphane (Python, C # vb.) üzerinden sorgu olarak çalıştırılabilir. - Mark Rushakoff 25 Temmuz '21:09

  1. 'yalnızca bir komut satırından kullanılabilir' insanları yanıltabilir. Hemen hemen her (muhtemelen her?) Programlama dili diğer programları / komutları çağırabilir. Bu nedenle, alıntı yapılan yorum başka bir program çağırmak için şanssızdır, bu durumda sqlite, dilin her program için bir wrapper/ sağladığından daha fazla desteklenmesi daha olasıdır library(bu sadece orada bulunan programların kitlelerinin doğası tarafından eksikliğe eğilimli değildir) , aynı zamanda karşı hareket single-source principle, karmaşık maintenance, dünyadaki veri kaosunu daha da ileriye götürüyor).

1
Herhangi bir SQL veritabanından veri almak için bir program yazan herkes, veritabanına erişmek ve üzerinde sorgu yapmak için programlama dillerinde kullanılabilen uygun SQL sürücülerini kullanmalıdır. Veritabanına erişmenin uygun yolu budur. Geçici sorgular sağlamak için tasarlanmış bir komut satırı programını hacklemenizi kesinlikle önermem. Öneriniz çok yanlış. Geçici sorgular için bir komut satırı programı CERTAINLY program kodu sorguları veritabanında çalıştırmak için en uygun erişim noktası DEĞİLDİR. SQL sürücülerini kullanmak KESİNLİKLE 'karmaşık bakım' DEĞİLDİR - en iyi uygulamadır.
Medlock Perlman

Kötü olduğuna katılıyorum, kütüphanelere benzer. Bu yüzden Linux | BSD dağıtım paket yöneticilerini dağıtır. Ve neden 0install çapraz platform PM var. Demek istediğim, tüm programların paketleyicilere ihtiyacı olmadığını netleştirmekti. Her zaman mantıklı değil. Bu durumda (DB kullanımı) elbette bir sarıcı kullanmak kötü bir fikir değildir.
Radagast

1

Eğer bir grafik aracı kullanıyoruz. Tablo adının hemen yanındaki şemayı gösterir. Sqlite için DB Tarayıcısı durumunda, veritabanını açmak için tıklayın (sağ üst köşede), veritabanınızda gezinin ve açın, aşağıdaki tabloda yer alan bilgileri göreceksiniz.

resim açıklamasını buraya girin

kayıt / tablo_adı sağ tıklatın, kopya oluştur ifadesini tıklatın ve orada var.

Umarım komut satırıyla çalışamayan bazı yeni başlayanlara yardımcı oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.