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

Como habilitar o suporte a chave estrangeira no SQLite


No SQLite, as restrições de chave estrangeira não são impostas, a menos que o suporte a chave estrangeira tenha sido habilitado.

A habilitação de chaves estrangeiras envolve o seguinte:
  1. Ative chaves estrangeiras ao compilar SQLite.
  2. Ative chaves estrangeiras em tempo de execução.

Ativar chaves estrangeiras ao compilar SQLite


Quando se trata de compilar SQLite, não é tanto uma questão de habilitar chaves estrangeiras – é mais uma questão de não desabilitar eles.

Habilitar chaves estrangeiras ao compilar SQLite significa simplesmente que você não usa SQLITE_OMIT_FOREIGN_KEY e SQLITE_OMIT_TRIGGER ao compilá-lo.

Se SQLITE_OMIT_TRIGGER está definido, mas SQLITE_OMIT_FOREIGN_KEY não é, então as definições de chave estrangeira são analisadas e podem ser consultadas usando PRAGMA foreign_key_list , mas as restrições de chave estrangeira não são aplicadas. As PRAGMA foreign_keys O comando é um no-op nesta configuração.

Se OMIT_FOREIGN_KEY for definida, as definições de chave estrangeira não poderão ser analisadas (tentar especificar uma definição de chave estrangeira é um erro de sintaxe).

Ativar chaves estrangeiras em tempo de execução


Mesmo quando a biblioteca foi compilada com restrições de chave estrangeira habilitadas, você ainda precisa habilitar o suporte a chave estrangeira em tempo de execução.

Você pode fazer isso com o seguinte código:
PRAGMA foreign_keys = ON;

Como na maioria dos PRAGMA instruções, você pode substituir alternativamente ON com TRUE , YES , ou 1 .

Depois de executar isso, suas chaves estrangeiras serão aplicadas.

Observe que essa configuração não é necessária para criar chaves estrangeiras, mas é necessário para aplicar chaves estrangeiras.

Outras conexões


Observe que isso só habilita restrições de chave estrangeira para a conexão de banco de dados atual.

Se você abrir uma nova conexão, precisará executar essa instrução novamente se quiser que as chaves estrangeiras sejam impostas nessa conexão.

Verifique o suporte de chave estrangeira para a conexão atual


Você também pode verificar se as chaves estrangeiras já foram habilitadas para sua conexão atual executando o código a seguir.
PRAGMA foreign_keys;

Resultado:
1

No meu caso, eu já habilitei chaves estrangeiras para esta conexão, então o resultado é 1. Se as chaves estrangeiras estivessem desabilitadas, o resultado seria 0.

Aqui está um exemplo de desabilitação, verificação do valor e, em seguida, habilitar e verificar novamente o valor.
PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;

Resultado:
sqlite> PRAGMA foreign_keys = FALSE;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
0           
sqlite> PRAGMA foreign_keys = YES;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
1