SQLite
 sql >> Base de données >  >> RDS >> SQLite

Renvoyer une liste de clés étrangères dans SQLite

Dans SQLite, vous pouvez utiliser une instruction PRAGMA pour renvoyer une liste de clés étrangères pour une table donnée.

Syntaxe

La syntaxe ressemble à ceci :

PRAGMA foreign_key_list(table-name); 

table-name est le nom de la table dont vous voulez obtenir la liste des clés étrangères.

Exemple

Commençons par créer une table avec une contrainte de clé étrangère.

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

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

Dans ce cas, j'ai créé deux tables. Les animaux de compagnie table a une contrainte de clé étrangère qui fait référence aux Types tableau.

Maintenant, je peux utiliser le PRAGMA foreign_key_list(table-name) pour récupérer cette clé étrangère.

.mode line
PRAGMA foreign_key_list(Pets); 

Résultat (en utilisant la sortie verticale) :

 id =0 seq =0 table =Types from =TypeId to =TypeIdon_update =NO ACTIONon_delete =NO ACTION match =NONE

Cette instruction PRAGMA renvoie huit colonnes, j'ai donc utilisé la ligne .mode line pour afficher les résultats verticalement. C'est ainsi que vous n'avez pas à faire défiler latéralement.

Dans ce cas, il n'y a qu'une seule contrainte de clé étrangère sur la table. S'il y en avait plus, ils seraient listés dans les résultats.

Aucune clé étrangère

Voici ce qui se passe si j'exécute la même instruction PRAGMA sur une table sans aucune clé étrangère.

PRAGMA foreign_key_list(Types); 

Résultat (en utilisant la sortie verticale) :

 

(Ceci est vide car il n'y a pas de clés étrangères.)

Renvoyer les instructions CREATE TABLE

L'instruction suivante peut être utilisée pour renvoyer le code SQL réel utilisé pour créer chaque table avec une clé étrangère.

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

Résultat :

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

Dans ce cas, la base de données ne contient qu'une seule clé étrangère (celle que j'ai créée pour cet exemple). S'il y en avait plus, le CREATE TABLE les déclarations seraient toutes répertoriées dans ces résultats.