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

Criar uma restrição CHECK no SQLite


No SQLite, você pode criar um CHECK restrição adicionando o código aplicável dentro do CREATE TABLE declaração ao criar a tabela.

Se uma tabela tiver um CHECK restrição sobre ele, e você tenta inserir ou atualizar dados que violam o CHECK restrição, a operação falhará com um erro.

Restrição CHECK em nível de coluna


Aqui está um exemplo de criação de um CHECK em nível de coluna limitação.
CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price 
    CHECK (Price > 0)
);

A parte que vai CHECK (Price > 0) é o CHECK limitação.

Nesse caso, especifica que o preço deve ser maior que zero.

Agora vamos ver o que acontece se tentarmos inserir dados que violem essa restrição.
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 0.00);

Resultado:
Error: CHECK constraint failed: Products

O CHECK restrição funcionou como esperado.

Obtenho o mesmo resultado se tento usar um valor negativo.
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', -1.00);

Resultado:
Error: CHECK constraint failed: Products

Mas se eu aumentar para um valor maior que zero, então o INSERT operação for bem-sucedida.
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00);

SELECT * FROM Products;

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

Restrição CHECK no nível da tabela


Um CHECK no nível da tabela restrição verifica os dados em toda a linha, em vez de apenas uma única coluna. Em outras palavras, você pode usar uma restrição de nível de tabela para verificar dados de várias colunas.

Aqui está um exemplo de um CHECK em nível de tabela limitação.
CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price,
    Discount,
    CHECK (Price >= Discount)
);

Esta tabela é semelhante à primeira, exceto que adicionei uma coluna extra chamada Desconto .

Para o CHECK restrição, agora estou verificando se o preço é maior que o desconto (não queremos a possibilidade de ter um desconto maior que o preço real).

Veja o que acontece se eu tentar inserir um desconto maior que o preço.
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 2.00);

Resultado:
Error: CHECK constraint failed: Products

Se eu ajustar o desconto para que seja menor que o preço, ele será inserido com sucesso.
INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 0.50);

SELECT * FROM Products;

Resultado:
ProductId   ProductName  Price       Discount  
----------  -----------  ----------  ----------
1           Blue Widget  1.0         0.5