SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Gibt eine Liste von Fremdschlüsseln in SQLite zurück

In SQLite können Sie eine PRAGMA-Anweisung verwenden, um eine Liste von Fremdschlüsseln für eine bestimmte Tabelle zurückzugeben.

Syntax

Die Syntax lautet wie folgt:

PRAGMA foreign_key_list(table-name);

Wobei table-name ist der Name der Tabelle, aus der Sie die Liste der Fremdschlüssel erhalten möchten.

Beispiel

Lassen Sie uns zuerst eine Tabelle mit einer Fremdschlüsseleinschränkung erstellen.

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

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

In diesem Fall habe ich zwei Tabellen erstellt. Die Haustiere Die Tabelle hat eine Fremdschlüsseleinschränkung, die auf die Typen verweist Tabelle.

Jetzt kann ich die PRAGMA foreign_key_list(table-name) verwenden -Anweisung, um diesen Fremdschlüssel abzurufen.

.mode line
PRAGMA foreign_key_list(Pets);

Ergebnis (bei vertikaler Ausgabe):

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

Diese PRAGMA-Anweisung gibt acht Spalten zurück, also habe ich .mode line verwendet um die Ergebnisse vertikal auszugeben. So müssen Sie nicht seitwärts scrollen.

In diesem Fall gibt es nur eine Fremdschlüsseleinschränkung für die Tabelle. Wenn es mehr gäbe, würden sie in den Ergebnissen aufgeführt.

Keine Fremdschlüssel

Folgendes passiert, wenn ich dieselbe PRAGMA-Anweisung auf einer Tabelle ohne Fremdschlüssel ausführe.

PRAGMA foreign_key_list(Types);

Ergebnis (bei vertikaler Ausgabe):

 

(Dies ist leer, da keine Fremdschlüssel vorhanden sind.)

Gib die CREATE TABLE-Anweisungen zurück

Die folgende Anweisung kann verwendet werden, um den tatsächlichen SQL-Code zurückzugeben, der zum Erstellen jeder Tabelle mit einem Fremdschlüssel verwendet wurde.

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

Ergebnis:

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

In diesem Fall enthält die Datenbank nur einen Fremdschlüssel (den ich für dieses Beispiel erstellt habe). Wenn es mehr gäbe, die CREATE TABLE Aussagen würden alle in diesen Ergebnissen aufgelistet.