sql >> Databasteknik >  >> RDS >> SQLite

Returnera en lista över främmande nycklar i SQLite

I SQLite kan du använda en PRAGMA-sats för att returnera en lista med främmande nycklar för en given tabell.

Syntax

Syntaxen ser ut så här:

PRAGMA foreign_key_list(table-name);

Där table-name är namnet på tabellen du vill ha listan över främmande nycklar från.

Exempel

Låt oss först skapa en tabell med en främmande nyckel-begränsning.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type
);

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

I det här fallet skapade jag två tabeller. Husdjur tabellen har en främmande nyckel-begränsning som refererar till Typer bord.

Nu kan jag använda PRAGMA foreign_key_list(table-name) uttalande för att hämta den främmande nyckeln.

.mode line
PRAGMA foreign_key_list(Pets);

Resultat (med vertikal utdata):

      id = 0
      seq = 0
    table = Types
     from = TypeId
       to = TypeId
on_update = NO ACTION
on_delete = NO ACTION
    match = NONE

Denna PRAGMA-sats returnerar åtta kolumner, så jag använde .mode line för att visa resultaten vertikalt. Detta för att du inte behöver rulla i sidled.

I det här fallet finns det bara en begränsning av främmande nyckel på bordet. Om det fanns fler skulle de listas i resultaten.

Inga främmande nycklar

Det här är vad som händer om jag kör samma PRAGMA-sats på en tabell utan några främmande nycklar.

PRAGMA foreign_key_list(Types);

Resultat (med vertikal utdata):

 

(Detta är tomt eftersom det inte finns några främmande nycklar.)

Tillbaka CREATE TABLE-satserna

Följande sats kan användas för att returnera den faktiska SQL-koden som används för att skapa varje tabell med en främmande nyckel.

.mode column
SELECT sql 
FROM sqlite_master 
WHERE sql LIKE('%REFERENCES%');

Resultat:

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

I det här fallet innehåller databasen bara en främmande nyckel (den jag skapade för detta exempel). Om det fanns fler, CREATE TABLE påståenden skulle alla listas i dessa resultat.


  1. Utöka användningen av DBCC CLONEDATABASE

  2. Finns det några nackdelar med att alltid använda nvarchar(MAX)?

  3. Använd MySQL relationsdatabaser på Fedora 12

  4. Förhindra automatisk inkrement på MySQL dubblett infogning