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