SQL

Restrições CHECK

A cláusula CHECK é um tipo de restrição utilizada em bancos de dados relacionais para garantir que os valores inseridos em uma coluna ou linha atendam a determinadas condições lógicas. Ela ajuda a reforçar a integridade dos dados, assegurando que apenas valores válidos sejam armazenados. No MySQL, o suporte ao CHECK foi aprimorado a partir da versão 8.

Estrutura do CHECK

A restrição CHECK pode ser definida de duas formas, se aplicando a apenas uma coluna:

CREATE TABLE alunos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  nota DECIMAL(10,2) CHECK (nota >= 0 AND nota <=10)
);

Ou considerando mais de uma coluna, como no exemplo abaixo:

CREATE TABLE pedidos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  quantidade INT,
  preco DECIMAL(10,2),
  CHECK (quantidade > 0 AND preco >= 0)
);

Neste último caso, cada registro só será aceito se a quantidade for maior que zero e o preço não for negativo.

Limitações do CHECK

O comando CHECK é bastante útil, mas apresenta algumas limitações importantes. Ele não permite o uso de subconsultas (SELECT) dentro da condição, nem pode se referir a colunas de outras tabelas. Além disso, em alguns bancos de dados, como no MySQL antes da versão 8.0.16, sua utilização era apenas sintática, sem efeito prático. Para validações mais complexas, normalmente é necessário recorrer a triggers ou à lógica implementada diretamente na aplicação.

Enquanto o CHECK é simples, direto e definido já na criação da tabela, sendo ideal para regras de domínio e restrições básicas, as triggers oferecem maior flexibilidade, permitindo o uso de consultas, condições complexas e até manipulação de outras tabelas. No entanto, essa flexibilidade vem acompanhada de maior complexidade e custo de manutenção.

Documentação