sql >> Databasteknik >  >> RDS >> SQLite

4 sätt att få information om en tabells struktur i SQLite

Ibland vill man bara se den grundläggande strukturen i en tabell.

I SQLite finns det flera sätt att hämta information om en given tabell. Här är särskilt fyra alternativ:

  • PRAGMA table_info() uttalande
  • PRAGMA table_xinfo() uttalande (för virtuella tabeller)
  • .schema kommando
  • sqlite_master tabell

Exempel på varje metod finns nedan.

PRAGMA table_info()

PRAGMA table_info() sats returnerar en rad för varje kolumn i den namngivna tabellen. Det är ungefär som en SQLite som motsvarar DESCRIBE uttalande i MySQL.

Syntax

Syntaxen ser ut så här:

PRAGMA schema.table_info(table-name);

Där table-name är namnet på tabellen du behöver information om.

schema del är valfri. Detta är namnet på en bifogad databas eller main eller temp för huvud- och TEMP-databaserna. Om du inte anger detta kommer huvuddatabasen att användas.

Exempel

Här är ett exempel på att returnera information om en tabell som heter Husdjur .

PRAGMA table_info(Pets);

Resultat:

cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           PetId       INTEGER     0                       1         
1           PetName                 0                       0         
2           TypeId                  0                       0         

I det här fallet, endast den första kolumnen (PetId ) har sin datatyp uttryckligen definierad. De andra skapades utan att deras typer var explicit definierade.

Vi kan också se att PetId kolumnen är den primära nyckelkolumnen (det finns en 1 i pk kolumn).

PRAGMA table_xinfo()

PRAGMA table_xinfo() satsen är exakt samma som PRAGMA table_info() sats, förutom att den också returnerar dolda kolumner på virtuella tabeller.

Om du vill se strukturen för en virtuell tabell, inklusive eventuella dolda kolumner, är det den här du ska använda.

Här är ett exempel med samma tabell från föregående exempel.

PRAGMA table_xinfo(Pets);

Resultat:

cid         name        type        notnull     dflt_value  pk          hidden    
----------  ----------  ----------  ----------  ----------  ----------  ----------
0           PetId       INTEGER     0                       1           0         
1           PetName                 0                       0           0         
2           TypeId                  0                       0           0         

Du kanske måste rulla i sidled för att se den extra kolumnen. I det här fallet är ingen av kolumnerna dold (och det är inte en virtuell tabell), så alla rader är 0 för den kolumnen.

Här är resultatet igen, men med vertikal utdata (.mode line ) så att du inte behöver rulla i sidled.

.mode line
PRAGMA table_xinfo(Pets);

Resultat:

       cid = 0
      name = PetId
      type = INTEGER
   notnull = 0
dflt_value = 
        pk = 1
    hidden = 0


       cid = 1
      name = PetName
      type = 
   notnull = 0
dflt_value = 
        pk = 0
    hidden = 0


       cid = 2
      name = TypeId
      type = 
   notnull = 0
dflt_value = 
        pk = 0
    hidden = 0

.schema-kommandot

Ett annat sätt att hämta en tabells struktur är att använda .schema kommando. Detta är en av flera metoder du kan använda för att returnera den SQL som användes för att skapa tabellen.

Här är ett exempel med samma tabell från föregående exempel.

.schema Pets

Resultat:

CREATE TABLE Pets( 
    PetId INTEGER PRIMARY KEY, 
    PetName,
    TypeId,
    FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);

Denna metod låter oss se mer information om tabellen. I det här exemplet kan vi se att TypeId kolumn är faktiskt en främmande nyckel som refererar till en kolumn i en annan tabell.

Sqlite_master-tabellen

Du kan använda sqlite_master tabell till samma sak som föregående exempel.

Här är ett exempel med samma tabell.

SELECT sql 
FROM sqlite_master 
WHERE tbl_name = 'Pets';

Resultat:

CREATE TABLE Pets( 
    PetId INTEGER PRIMARY KEY, 
    PetName,
    TypeId,
    FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
)

  1. Är det en dålig idé att ha ett "ELLER" i ett INNER JOIN-tillstånd?

  2. mysqli eller PDO - vilka är för- och nackdelarna?

  3. Hur man importerar en DBF-fil i SQL Server

  4. Behöver hjälp med beräkning med två datamängder med Expression SSRS