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

Returner en liste over fremmede nøgler i SQLite

I SQLite kan du bruge en PRAGMA-sætning til at returnere en liste over fremmednøgler for en given tabel.

Syntaks

Syntaksen ser sådan ud:

PRAGMA foreign_key_list(table-name);

Hvor table-name er navnet på den tabel, du vil have listen over fremmednøgler fra.

Eksempel

Lad os først oprette en tabel med en fremmednøglebegræ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 dette tilfælde oprettede jeg to tabeller. Kæledyr tabellen har en fremmednøglebegrænsning, der refererer til Typerne tabel.

Nu kan jeg bruge PRAGMA foreign_key_list(table-name) sætning for at hente den fremmednøgle.

.mode line
PRAGMA foreign_key_list(Pets);

Resultat (ved hjælp af lodret output):

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

Denne PRAGMA-sætning returnerer otte kolonner, så jeg brugte .mode line for at udskrive resultaterne lodret. Dette er, så du ikke behøver at rulle sidelæns.

I dette tilfælde er der kun én fremmednøglebegrænsning på bordet. Hvis der var flere, ville de være opført i resultaterne.

Ingen fremmednøgler

Her er, hvad der sker, hvis jeg kører den samme PRAGMA-sætning på en tabel uden nogen fremmednøgler.

PRAGMA foreign_key_list(Types);

Resultat (ved hjælp af lodret output):

 

(Dette er tomt, fordi der ikke er nogen fremmednøgler.)

Returner CREATE TABLE-erklæringerne

Følgende sætning kan bruges til at returnere den faktiske SQL-kode, der blev brugt til at oprette hver tabel med en fremmednøgle.

.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 dette tilfælde indeholder databasen kun én fremmednøgle (den jeg oprettede til dette eksempel). Hvis der var flere, CREATE TABLE udsagn vil alle blive opført i disse resultater.


  1. Hvordan undslipper jeg reserverede ord, der bruges som kolonnenavne? MySQL/Opret tabel

  2. Hvad er den maksimale størrelse på VARCHAR2 i PL/SQL og SQL?

  3. Hvordan kontrollerer jeg, om en værdi er et heltal i MySQL?

  4. Forskellen i håndteringen af ​​mellemrummene mellem Oracle og SQL Server