SQLite
 sql >> Database >  >> RDS >> SQLite

Restituisce un elenco di chiavi esterne in SQLite

In SQLite, puoi utilizzare un'istruzione PRAGMA per restituire un elenco di chiavi esterne per una determinata tabella.

Sintassi

La sintassi è questa:

PRAGMA foreign_key_list(table-name);

Dove table-name è il nome della tabella da cui vuoi inserire l'elenco delle chiavi esterne.

Esempio

Innanzitutto, creiamo una tabella con un vincolo di chiave esterna.

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

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

In questo caso ho creato due tabelle. Gli Animali domestici tabella ha un vincolo di chiave esterna che fa riferimento ai Tipi tabella.

Ora posso usare il PRAGMA foreign_key_list(table-name) istruzione per recuperare quella chiave esterna.

.mode line
PRAGMA foreign_key_list(Pets);

Risultato (usando l'output verticale):

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

Questa istruzione PRAGMA restituisce otto colonne, quindi ho usato .mode line per produrre i risultati verticalmente. In questo modo non devi scorrere lateralmente.

In questo caso c'è solo un vincolo di chiave esterna sul tavolo. Se ce ne fossero di più, sarebbero elencati nei risultati.

Nessuna chiave esterna

Ecco cosa succede se eseguo la stessa istruzione PRAGMA su una tabella senza chiavi esterne.

PRAGMA foreign_key_list(Types);

Risultato (usando l'output verticale):

 

(Questo è vuoto perché non ci sono chiavi esterne.)

Restituisci le istruzioni CREATE TABLE

L'istruzione seguente può essere utilizzata per restituire il codice SQL effettivo utilizzato per creare ogni tabella con una chiave esterna.

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

Risultato:

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

In questo caso il database contiene solo una chiave esterna (quella che ho creato per questo esempio). Se ce ne fossero di più, il CREATE TABLE tutte le affermazioni sarebbero elencate in questi risultati.