Valores inválidos no SQL? CHECK a sua integridade
![Valores inválidos no SQL? CHECK a sua integridade](https://www.alura.com.br/artigos/assets/code/valores-invalidos-no-sql-check-sua-integridade.1722043658.png)
Promoção com viagem internacional por 5 reais? Ou ainda -5 reais? Tem campos que deveriam ser validados declarativamente, como o preço de um produto:
create table Produto (preco DECIMAL(10,2));
insert into Produto values (-5);
\> Inserindo 1 linha de boa
:(
![Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!](assets/alura-matricula-maior-escola-tecnologia-brasil-mais-500-mil-estudantes/matricula-escola-data-science-alura-saiba-mais-versao-mobile.png)
Que caca. Eu queria integridade dos meus dados. Queria que ele checasse por valores inválidos.
Manda o banco checar o valor:
alter table Produto add constraint preco_positivo check (preco > 0);
insert into Produto values (-5);
\> Caca, preco_positivo não rolou.
MySQL ainda não suporta checks, bora aprender a usar Oracle? Postgre, SQL Server e outros também suportam :)
Seus dados possuem restrições que quer garantir a integridade no banco? Use o CHECK constraint.
Desafio: quero todos os livros ativos que estão baratos ou caros. Que caca eu fiz na query a seguir? Discutimos no próximo artigo!
select * from Livros where ativo = true and preco < 10 or preco > 1000;