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