Restrição de banco de dados ou database constraint do tipo check ou validação. Essa é uma condição lógica que nós vamos aplicar àquela coluna quando uma linha é inserida ou atualizada. Vamos aos detalhes. Vamos aos detalhes. Então, aqui é uma condição que será verificada automaticamente no momento de uma inserção ou atualização. E caso esta condição não seja atendida, o banco de dados retorna um erro. Ou seja, se a condição é falsa, temos um erro. Se a condição é verdadeira, nós temos sucesso na inserção ou atualização daquele valor naquela coluna. E esta expressão pode ser uma expressão mais sofisticada, uma expressão complexa, que avalia uma ou mais colunas. E da mesma forma como nós vimos na primeira validação, que é o default, esta expressão pode ter valores codificados, que são os hardcoded, e também pode ter chamadas de funções do sistema, como nós vimos ali várias funções que chamam a data atual, ou funções definidas pela gente, pelo usuário do banco de dados. Vamos ao código. Em Oracle, nós vamos manter aquela mesma estrutura. Então, temos um alter table, que é o comando SQL de modificação de uma tabela, que é a tabela empregado, modelando o conceito de um empregado de uma empresa, e estamos adicionando a constraints, e aqui vou fazer um pequeno detalhe, as constraints podem ter nomes, e é sempre muito bom tomar cuidado na validação aqui da nossa documentação, então é sempre muito bom deixar claro, documentado, atribuir nomes intuitivos, porque você está gerando um artefato que em algum momento outra pessoa trabalhou e outra pessoa vai trabalhar depois de você. E se você é a pessoa que está recebendo um código que você nunca viu na vida, seria muito bom se a gente conseguisse, pela nomenclatura e pela documentação, ter uma compreensão mais rápida do que está acontecendo. Então, aqui eu já trouxe um exemplo de uma Constraint com nome. Então, inclusive os nomes vão ter padrões. A sua empresa provavelmente vai ter uma nomenclatura definida. Então, neste meu exemplo, eu trouxe a CK empregado salário, CK de check, então eu já sei que eu estou verificando o salário, o atributo salário da tabela empregado. Logo em seguida, a palavra-chave check e entre parênteses a condição lógica. E essa condição lógica é que o campo salários, salary, seja maior do que zero. Então, com isso, nós temos a validação de que todo o salário de todas as pessoas cadastradas na tabela empregada serão maiores do que zero. Se a aplicação inserir um registro que seja zero ou menor do que zero, não vai conseguir ter sucesso nessa operação. O banco de dados vai gerar um erro, vai rejeitar essa inserção ou atualização. Em seguida, em MySQL, eu trouxe um comando de create table, e aqui nós vamos ter, claro, a particularidade da sintaxe do MySQL, mas nós temos também uma validação mais sofisticada. Então, no começo, nós temos um check atribuído ao nível de tabela, nós temos uma verificação de que o campo 1, C1, é diferente do campo 2, C2. Logo em seguida, para o campo C1, que é o inteiro, nós estamos validando que este campo, que é esta coluna, é maior do que 10 Então ali nós temos um check a nível de coluna Então o primeiro check C1 diferente de C2 está em nível de tabela, porque tem duas colunas sendo verificadas C1 está em nível de coluna, ela própria, com esta validação de ser maior do que 10. Já em C2, também é um inteiro, e nesse exemplo eu estou nomeando, então estou chamando a minha construinte de C2 positivo, porque eu quero verificar que a regra é que C2 seja maior do que zero. porque eu quero verificar que a regra é que C2 seja maior do que zero. Então, nós temos a palavra check e, entre parênteses, a expressão lógica que precisa ser validada. Em seguida, em C3, o mesmo raciocínio, eu coloquei C3 do tipo inteiro, com o check para que seja menor do que 100. Percebam que, nesses casos em que eu não nomeei explicitamente o nome da constraint, o banco de dados vai gerar um nome artificial e nós vamos ter essa nomenclatura gerada. Se você tiver interesse, se for regra do seu time de desenvolvimento, nomeie as suas constraints para facilitar a compreensão. no meio das suas constrências para facilitar a compreensão. As demais constrências aqui, também temos uma constrência C1 non-zero, ou seja, estou verificando que C1 é diferente de zero, e também mais um check no final de C1 maior do que C3. Então, podemos ter verificações ou validações sofisticadas, combinadas, em nível de tabela e em nível de coluna. Avançando para SQL Server, aqui também nós vamos manter o mesmo raciocínio, claro, na sintaxe de SQL Server. Então, estamos mudando uma tabela produto, alter table produto, adicionando uma constroente nomeada, que é a ck produto estoque atual. Estou seguindo a nomenclatura da empresa na qual eu trabalho. Então, estou fazendo uma verificação de que o estoque atual é maior ou igual a zero deste produto que está sendo inserido ou atualizado na tabela produto. Então, temos a palavra-chave check e, entre parênteses, assim como vimos nos casos anteriores, a expressão lógica que precisa ser validada. Abaixo, também, outra expressão lógica, preço maior do que zero, nomeada preço produto, na mesma tabela produto. Em Pulse, estamos criando uma tabela empregado, onde a idade dessa pessoa tem que ser maior ou igual a 18. Então, idade é um campo inteiro, int declaração de inteiro, check, abre parênteses, expressão de validação deste inteiro, que é a idade maior ou igual a 18. E com isso, vimos a Constraint do tipo check.