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

Como habilitar/desabilitar restrições CHECK no SQLite


Se você precisar ativar ou desativar todos os CHECK restrições no SQLite, você pode usar as ignore_check_constraints Declaração PRAGMA.

Esta declaração pragma habilita ou desabilita explicitamente a aplicação de CHECK restrições. A configuração padrão está desativada, o que significa que CHECK restrições são impostas por padrão.

Sintaxe


A sintaxe fica assim:
PRAGMA ignore_check_constraints = boolean;

Onde booleano é um valor booleano.
  • Para desativar CHECK restrições, isso pode ser qualquer um dos seguintes:
    • false
    • no
    • off
    • 0
  • Para ativar CHECK restrições, isso pode ser qualquer um dos seguintes:
    • true
    • yes
    • on
    • 1

Exemplo


Primeiro, vamos criar uma tabela com um CHECK limitação:
CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price 
    CHECK (Price > 0)
);

Agora podemos alternar CHECK restrições ativadas ou desativadas conforme necessário para impor ou não essa restrição.

Ativar restrições CHECK


Aqui está um exemplo de como habilitar todos os CHECK restrições:
PRAGMA ignore_check_constraints = 0;

Como mencionado, este é o valor padrão de qualquer maneira. Então, se você não usar esta instrução PRAGMA CHECK as restrições já estarão definidas para esse valor.

Agora vamos testar esse CHECK restrições são de fato habilitadas ao tentar inserir dados que violem esse CHECK limitação:
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 0.00);

Resultado:
Error: CHECK constraint failed: Products

Portanto, o CHECK restrição foi aplicada como esperado.

Desativar restrições CHECK


Aqui está um exemplo de como desabilitar todos os CHECK restrições:
PRAGMA ignore_check_constraints = 1;

Agora vamos tentar inserir os mesmos dados novamente e selecionar o resultado:
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 0.00);

SELECT * FROM Products;

Resultado:
ProductId   ProductName  Price     
----------  -----------  ----------
1           Blue Widget  0.0       

Como esperado, os dados conseguiram entrar no banco de dados, mesmo violando o CHECK limitação.