sql >> Database >  >> RDS >> SQLite

Een lijst met buitenlandse sleutels retourneren in SQLite

In SQLite kun je een PRAGMA-statement gebruiken om een ​​lijst met externe sleutels voor een bepaalde tabel te retourneren.

Syntaxis

De syntaxis gaat als volgt:

PRAGMA foreign_key_list(table-name);

Waar table-name is de naam van de tabel waarvan u de lijst met externe sleutels wilt hebben.

Voorbeeld

Laten we eerst een tabel maken met een externe sleutelbeperking.

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

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

In dit geval heb ik twee tabellen gemaakt. De Huisdieren tabel heeft een externe sleutelbeperking die verwijst naar de Typen tafel.

Nu kan ik de PRAGMA foreign_key_list(table-name) . gebruiken statement om die externe sleutel op te halen.

.mode line
PRAGMA foreign_key_list(Pets);

Resultaat (met verticale uitvoer):

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

Deze PRAGMA-instructie retourneert acht kolommen, dus ik gebruikte .mode line om de resultaten verticaal uit te voeren. Zo hoef je niet zijwaarts te scrollen.

In dit geval is er slechts één externe sleutelbeperking op tafel. Als er meer waren, zouden ze in de resultaten worden vermeld.

Geen externe sleutels

Dit is wat er gebeurt als ik hetzelfde PRAGMA-statement uitvoer op een tafel zonder externe sleutels.

PRAGMA foreign_key_list(Types);

Resultaat (met verticale uitvoer):

 

(Dit is blanco omdat er geen externe sleutels zijn.)

Retourneer de CREATE TABLE-verklaringen

De volgende instructie kan worden gebruikt om de daadwerkelijke SQL-code te retourneren die is gebruikt om elke tabel met een externe sleutel te maken.

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

Resultaat:

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

In dit geval bevat de database slechts één externe sleutel (degene die ik voor dit voorbeeld heb gemaakt). Als er meer waren, de CREATE TABLE uitspraken zouden allemaal in deze resultaten worden vermeld.


  1. hoe het eerste of (een) element van een LiveData-lijst in Android MVVM-architectuur te krijgen?

  2. Hoe kan ik iets doen als:GEBRUIK @databaseName

  3. Het Microsoft Office-product dat weigert te sterven

  4. 'Tijd'-opslaggrootte in SQL Server begrijpen