sql >> Base de Datos >  >> RDS >> SQLite

Devolver una lista de claves foráneas en SQLite

En SQLite, puede usar una instrucción PRAGMA para devolver una lista de claves externas para una tabla determinada.

Sintaxis

La sintaxis es así:

PRAGMA foreign_key_list(table-name);

Donde table-name es el nombre de la tabla de la que desea obtener la lista de claves externas.

Ejemplo

Primero, creemos una tabla con una restricción de clave externa.

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

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

En este caso creé dos tablas. Las mascotas la tabla tiene una restricción de clave externa que hace referencia a los Tipos mesa.

Ahora puedo usar PRAGMA foreign_key_list(table-name) declaración para recuperar esa clave externa.

.mode line
PRAGMA foreign_key_list(Pets);

Resultado (usando salida vertical):

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

Esta instrucción PRAGMA devuelve ocho columnas, así que usé .mode line para mostrar los resultados verticalmente. Esto es para que no tenga que desplazarse hacia los lados.

En este caso, solo hay una restricción de clave externa en la tabla. Si hubiera más, se incluirían en los resultados.

Sin claves foráneas

Esto es lo que sucede si ejecuto la misma instrucción PRAGMA en una tabla sin ninguna clave externa.

PRAGMA foreign_key_list(Types);

Resultado (usando salida vertical):

 

(Esto está en blanco porque no hay claves foráneas).

Devuelve las instrucciones CREATE TABLE

La siguiente declaración se puede utilizar para devolver el código SQL real utilizado para crear cada tabla con una clave externa.

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

Resultado:

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

En este caso, la base de datos solo contiene una clave externa (la que creé para este ejemplo). Si hubiera más, el CREATE TABLE todas las declaraciones se enumerarían en estos resultados.