SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Retornar uma lista de chaves estrangeiras no SQLite


No SQLite, você pode usar uma instrução PRAGMA para retornar uma lista de chaves estrangeiras para uma determinada tabela.

Sintaxe


A sintaxe fica assim:
PRAGMA foreign_key_list(table-name);

Onde table-name é o nome da tabela da qual você deseja obter a lista de chaves estrangeiras.

Exemplo


Primeiro, vamos criar uma tabela com uma restrição de chave estrangeira.
CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type
);

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

Neste caso eu criei duas tabelas. Os animais de estimação tabela tem uma restrição de chave estrangeira que faz referência aos Tipos tabela.

Agora posso usar o PRAGMA foreign_key_list(table-name) instrução para recuperar essa chave estrangeira.
.mode line
PRAGMA foreign_key_list(Pets);

Resultado (usando saída vertical):
      id = 0
      seq = 0
    table = Types
     from = TypeId
       to = TypeId
on_update = NO ACTION
on_delete = NO ACTION
    match = NONE

Esta instrução PRAGMA retorna oito colunas, então usei .mode line para produzir os resultados verticalmente. Isso é para que você não precise rolar para os lados.

Nesse caso, há apenas uma restrição de chave estrangeira na tabela. Se houvesse mais, eles seriam listados nos resultados.

Sem chaves estrangeiras


Aqui está o que acontece se eu executar a mesma instrução PRAGMA em uma tabela sem nenhuma chave estrangeira.
PRAGMA foreign_key_list(Types);

Resultado (usando saída vertical):
 
(Isso está em branco porque não há chaves estrangeiras.)

Retorne as instruções CREATE TABLE


A instrução a seguir pode ser usada para retornar o código SQL real usado para criar cada tabela com uma chave estrangeira.
.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)
)

Nesse caso, o banco de dados contém apenas uma chave estrangeira (aquela que criei para este exemplo). Se houvesse mais, o CREATE TABLE afirmações seriam todas listadas nestes resultados.